Delphi Prism’le ilgili bir önceki makalede Visual Studio’dan yararlanmadan Not Defteri ile Delphi Prism kodu yazıp konsolda derleme yapmıştık. Bu makalede ise Visual Studio 2008/2010’dan yararlanıp konsol uygulaması hazırlayacağız. Bu amaçla Visual Studio’nun New Project diyalog kutusunu ekrana getirip Project Types kutusunda Delphi Prism’i ve Templates liste kutusunda ise Console Application’ı seçtim.

Devamında Name başlıklı TextBox’a konsol uygulamasına vermek istediğim adı ve Location başlıklı seçenek için Browse düğmesinden yararlanıp “C:” sürücüsünün kök klasörünü seçtim. Bu şartlarda OK düğmesi tıklanırsa Visual Studio aşağıdaki gibi bir konsol uygulaması hazırlar.

Console Application şablonu ile hazırlanan uygulama dahilinde toplam 7 referans’ın kullanılabilmesi için otomatik olarak ayarlama yapılmaktadır. Başka bir deyişle 7 referans Solution Explorer penceresinde listelenmektedir.
Visual Studio sayesinde hazırlanan konsol uygulaması kaynak(resource) ve yapılandırma seçeneklerinin olduğu dosyalardan başka “Program.pas” adında bir kod dosyası hazırlamaktadır. Bu kod dosyasının içeriğini aşağıda görebilirsiniz.

“Program.pas” adlı kod dosyasını yakından incelediğinizde Visual Studio’nun konsol uygulamasıyla aynı ada sahip bir Namespace hazırladığını hemen fark edersiniz. Devamında kod dosyasının interface bölgesinde ConsoleApp adında bir Class hazırlayıp bu Class’ın Main adında bir metoda sahip olacağı deklare edilmektedir. Bu kod dosyasının implementation bölgesinde ise Main() metoduna yer verilip Console sınıfının WriteLine() metodu ile kullanıcıya “Merhaba Dünya” denilmektedir.
Her ne kadar Console Application şablonu ile hazırlanan Delphi Prism uygulamasıyla ilgili olarak Solution Explorer penceresinde toplam 7 referans listelense bile uses bloğunda bir tek System.Ling’deki sınıfların direk yani namespace adı belirtilmeden kullanılabilmesi için hazırlık yapılmış. Console sınıfının WriteLine() metodu kullanılırken sınıf adından önce System adlı Namespace’in adının yazılmamış olması bir soruna neden olmuyor.
Bir önceki makalede işaret edildiği gibi metot hazırlarken klasik Delphi geleneğine bağlı kalıp geriye değer göndermeyenleri hazırlarken procedure, değer gönderenleri ise function anahtar kelimesini kullanmak mümkündür. Bu makalelerde procedure ve function yerine method anahtar kelimesini tercih edeceğiz. Şimdi yukarıda Visual Studio tarafından hazırlanan koda ekleme yapıp bir metot hazırlayıp Main() metodu içinde bu metodu işleteceğiz.
namespaceConsoleApplication1;
interface
uses
System.Linq;
type
ConsoleApp = class
public
class method Main;
class method mesaj;
end;
implementation
class method ConsoleApp.mesaj();
Begin
Console.WriteLine('www.memikyanik.net');
Console.WriteLine('');
Console.Write('Çıkmak İçin Bir Tuşa Basın')
end;
classmethod ConsoleApp.Main;
begin
mesaj; // metot işletiliyor
Console.ReadKey();
end;
end.
Bu kodda önce class’ın public bloğunda mesaj adında ve geriye değer göndermeyen bir metot hazırlamak istediğimi belirttim. Bu class’ın private yani sınıfa özel herhangi bir üyesi olmadığı için private bloğuna yer vermedik. Ardından kod dosyasının, eski adıyla unit’in implementation bölgesinde bu metodu kodlayıp Main() metodu dahilinde işlettik. Bu şekilde düzenlenen konsol uygulaması derlenip işletilirse aşağıdaki gibi bir sonuç alınır.

Geriye değer göndermeyen metotların procedure anahtar kelimesi ile tanımlanabildiğini hatırlatmak için yukarıda verilen kodu biraz değiştirdik. “Mesaj” adını verdiğimiz metodu işletirken önüne yazılan Self geçerli sınıfı temsil etmektedir. Yazılmasa da olur.

Şimdi ise bu kod dosyası dahilinde ikinci bir Class hazırlayacağız. Bu amaçla kod dosyasının yani unit’in interface bölgesinde ikinci bir type-end bloğuna yer verdik.

Şimdi kendi hazırladığımız “mesaj” adlı metodun bu yeni sınıfın üyesi olmasını sağlayacağız. Bu amaçla “ikinci_sinif” adını verdiğimiz class’ın public bloğunda bu metodu deklare ettikten sonra Unit’in yani kod dosyasının implementation bölgesinde metodu aşağıdaki gibi kodladık. Yani mevcut metodu ikinci_sinif adlı class’ın üyesi olmasını sağladık.
namespaceConsoleApplication1;
interface
uses
System.Linq;
type
ConsoleApp = class
public
class method Main;
end;
type
ikinci_sinif = class
private
public
class procedure mesaj;
end;
implementation
class method ikinci_sinif.mesaj();
Begin
Console.WriteLine('www.memikyanik.net');
Console.WriteLine('');
Console.Write('Çıkmak İçin Bir Tuşa Basın')
end;
classmethod ConsoleApp.Main;
begin
Console.ReadKey();
end;
end.
Dikkat ederseniz bu kez “mesaj” adını verdiğimiz metodu uygulamanın başlangıç noktası olan Main() metodu içinde işletmedik. Çünkü mesaj() adlı metot bu kez başka bir sınıfın üyesidir. Bu nedenle bu metodu işletebilmek için sınıftan yola çıkıp nesne hazırlamak gerekir. Bu işlemin nasıl yapıldığını aşağıda görebilirsiniz. Sınıfın örneği alınırken yani sınıftan yola çıkılıp nesne hazırlanırken new anahtar kelimesi kullanılmaktadır.
namespaceConsoleApplication1;
interface
uses
System.Linq;
type
ConsoleApp = class
public
class method Main;
end;
type
ikinci_sinif = class
private
public
class method mesaj;
end;
implementation
class method ikinci_sinif.mesaj();
Begin
Console.WriteLine('www.memikyanik.net');
Console.WriteLine('');
Console.Write('Çıkmak İçin Bir Tuşa Basın')
end;
classmethod ConsoleApp.Main;
var
nesne : ikinci_sinif;
begin
nesne := new ikinci_sinif(); // Nesne hazırlanıyor.
nesne.mesaj(); //Metot işletiliyor.
Console.ReadKey();
end;
end.
Şimdi bu konsol uygulamasına sonradan bir Class dahil edip bu Class’ta bir Windows formu hazırlayıp ekrana getireceğiz. Bunu yaparken en ideali Application sınıfını kullanmaktır. Application sınıfından yararlanabilmek ve form hazırlayıp ekrana getirebilmek için “System.Windows.Forms” adlı namespace’i içeren referans veya DLL dosyasından projeyi haberdar edilmesi veya bu referansın Solution Explorer penceresinde listelenmesi gerekmektedir. Başka bir deyişle .NET Framework ile gelen bu referanstan yararlanmak istediğimizi belirtmemiz gerekiyor. Aşağıda verilen ekran görüntüsüne göre konsol uygulamalarında 7 referanstan yararlanılacağı konusunda Visual Studio tarafından ayarlama yapılmaktadır.

Konsol uygulamanızda System.Windows.Forms’deki sınıflardan yararlanmak istiyorsanız Solution Explorer penceresinden yararlanıp Add Reference diyalog kutusunu ekrana getirip System.Windows.Forms.dll referansın Solution Explorer penceresinde listelenmesini sağlamalısınız.
System.Windows.Forms.dllreferansı uygulamaya dahil edildikten sonra uses bloğunda Forms adlı namespace’deki sınıfları kullanmak istendiğinizi belirtirseniz Class adlarından önce namespace adını(System.Windows.Forms) yazmak zorunda kalmazsınız.
namespaceConsoleApplication1;
interface
uses
System.Windows.Forms ;
type
ConsoleApp = class
public
class method Main;
end;
implementation
classmethod ConsoleApp.Main;
begin
MessageBox.Show("Konsol Uygulaması Başlatılacak");
end;
end.
Şimdi ise konsol uygulaması dahilinde bir form hazırlayıp ekrana getireceğiz. Bu amaçla Visual Studio’nun Project menüsünden komut verip ekrana Add New Item diyalog kutusunu getirdik. Konsol uygulamasına ayrı bir kod dosyası dahil edip bu kod dosyasında bir Class hazırlamak istediğimiz için Class şablonunu seçtik.

Hazırlanacak kod dosyasının adı Name kutusuna yazılıp Add düğmesi tıklanırsa Visual Studio aşağıdaki gibi bir Class hazırlar. Visual Studio kod dosyası adını aynı zamanda Class adı olarak kullanmaktadır. Tabi kendiniz Visual Studio’nun hazırladığı bu Class’a istediğiniz adı verebilirsiniz.

Konsol uygulamasındaki 2. sınıfın “System.Windows.Forms” adlı namespace’te tanımlı olanFormsınıfının mirasçısı olmasını istediğimiz için Visual Studio tarafından hazırlanan Class’ta aşağıdaki gibi değişiklik yaptık. PAS uzantılı bu kod dosyasında Class için ayrıca constructor metot hazırlayıp bu metotta formun Text özelliğini ayarladık.

Class için constructor metodu hazırlamak zorunda değilsiniz. Constructor yani Yapıcı metotlar hakkında daha sonra bilgi verilecektir. Hazırlamak istediğiniz sınıf, mevcut sınıflardan hangisinin mirasçısı olacaksa o sınıfın adını class anahtar kelimesinden sonra parantezlerin içine yazmak gerekmektedir.
Bu uygulamaya sonradan dahil ettiğimiz PAS uzantılı kod dosyasındaki Class1’i bu şekilde düzenledikten sonra “Program.pas” dosyasına geçip new anahtar kelimesi ile Class1’den yola çıkıp nesne hazırlayıp bu nesneyi Application sınıfının Run() metoduna parametre olarak verdik.

.NET Framework ile gelen System.Windows.Forms’deki Form sınıfından yararlanılarak hazırlanan form standart özelliklere sahip olur. Bu kod işletildiğinde ekrana aşağıdaki gibi bir form getirilir ve form kapatılıncaya kadar konsol uygulaması çalışmaya devam eder.

Yukarıda anlatılan şekilde hazırladığınız form nesnesini ekrana getirmek için Application sınıfının Run() metodundan yararlanmak zorunda değilsiniz. Form1’i ekrana getirmek için ShowDialog() metodundan yararlanabilirsiniz.
classmethod ConsoleApp.Main;
begin
var Form1 := new Class1();
Form1.ShowDialog();
end;
Konsol uygulamasında bu şekilde form hazırlamak size mantıklı gelmeyebilir ama buradaki amaç deneyseldir. Şimdi ise kod yazarak ListBox hazırlayıp bu formun üzerine yerleştireceğiz. Bu amaçla konsol uygulamasının Main() metodunu aşağıdaki gibi düzenledik.
classmethod ConsoleApp.Main;
begin
var Form1 := new Class1();
var Liste1 : System.Windows.Forms.ListBox;
Liste1 := new System.Windows.Forms.ListBox();
Liste1.Top := 25;
Liste1.Left := 25;
Liste1.Parent := Form1;
Liste1.Items.Add("Fernando Alonso");
Liste1.Items.Add("Michael Schumacher");
Form1.ShowDialog();
end;
Yukarıda konsol uygulamasına 2. bir PAS uzantılı kod dosyası dahil edip bu dosyasında bir class hazırladık ve bu Class’ın Form class’ının mirasçısı olmasını sağladık. Devamında ise bu class’tan yararlanarak nesne hazırlayıp ekrana getirdik. Aslında form nesnesi hazırlamak için ayrıca bir Class hazırlamak zorunda değilsiniz. Konunun açığa çıkması için yukarıda verilen konsol uygulamasındaki 2. PAS dosyasını silip ilk dosyayı(program.pas) aşağıdaki gibi düzenledik.

Bir sonraki makalede Visual Studio ile bir Windows Forms uygulaması hazırlayıp Delphi Prism hakkında adım adım bilgi vermeye devam edeceğiz.