Teknoloji Haberleri - ShiftDelete.Net
Reklam
Reklam

Delphi Dersi 3: Çalışma Ortamı

Ana sayfa /

Bir önceki derste Not Defteri ile basit bir Delphi programı yazıp DOS penceresinde derleyip çalıştırmıştık. Hazırladığımız kodları DPR uzantılı dosyaya yazmıştık. Bu derste Delphi’nin temel özelliklerini anlatmak üzere konuyu yeni baştan ele alacağım. Bu amaçla “ilk.dpr” adını verdiğim proje dosyasını aşağıdaki gibi düzenledim.

 

Reklam
Reklam

Tahmin edeceğiniz gibi bu Delphi programı derlenip çalıştırılırsa herhangi bir işlem yapmaz. DPR uzantılı bu kod dosyasında istediğiniz sayıda procedure ve fonksiyon hazırlayıp kullanabilirsiniz. İşe yarar projelerde bütün kodları bir dosyada toplamak pratik olmadığı için kodlar birden fazla dosya arasında dağıtılır.
Delphi’de DPR uzantılı proje dosyasından başka PAS uzantılı kod dosyaları olmakta ve bu kod dosyalarına Unit adı verilmektedir. Unit’lerin nasıl hazırlanıp kullanıldığını anlatmak için Not Defteri ile aşağıdaki gibi minimum satırlara sahip bir Unit hazırladım.

Projenin başlangıç noktasını içeren DPR uzantılı kod dosyaları Program deyimi ile başlarken Unit adı verilen diğer kod dosyaları Unit deyimi ile başlamaktadır. Unit’in sonunu işaret eden end deyiminin sonuna nokta(.) konulmaktadır. Ayrıca Unit’ler Interface ve Implementation adında 2 bölgeye sahip olmak zorundadır. Bu örnekte her iki bölgede de herhangi bir satır yoktur. Unit’lerde işlem yapan satırlar implementation bölgesine yazılırken tip tanımları interface bölgesinde yapılmaktadır. Şimdi unit’te basit procedure hazırlayacağım.

 

Unit’in implementation bölgesinde bu şekilde procedure hazırlamanız halinde derleyici hata rapor eder. Çünkü unit’lerin implementation bölgesinde hazırlanan procedure’lerin Interface bölgesinde deklare edilmesi veya tanımlanması gerekmektedir. Mesaj() adını verdiğim bu procedure veya yordamı nasıl deklare ettiğimi aşağıda görebilirsiniz.

 

 

Bu şekilde Unit hazırlayıp PAS uzantılı bir dosyaya yazdıktan sonra DPR uzantılı projeye veya program dosyasına dönüp Uses bluğunda bu Unit’i projeye dahil ettim.

Kendi hazırladığım Unit’i DPR uzantılı proje dosyasına bu şekilde Uses bloğunda dahil ettikten sonra Unit’teki procedure ve fonksiyonları kullanmak mümkün hale gelir. Kendi hazırlayıp “ilk_unit” adını verdiğim Unit’teki “Mesaj” aldı procedure’yi işletmek için DPR dosyasında sonu nokta(.) ile biten Begin-End bloğuna procedure’nin adını yazmakla yetindim.

 

PAS uzantılı kod doyası içinde Unit hazırlayıp bu Unit’i DPR dosyasına dahil ettikten sonra sıra geldi derleme yağmaya. Derlemi işlemini yaparken PAS uzantılı dosyayı EXE dosyaya dahil etmelisiniz.

 

Bu şekilde derleme yaparsanız “ilk.exe” adında bir EXE dosya hazırlanır. Bu EXE dosyayı çalıştırdığınızda Unit’te hazırlanan Mesaj() adını verdiğim procedure işletilir ve bu procedure’de kullanılan Write() metodu sayesinde işaret edilen mesaj ekrana yazılır.

Delphi’nin Program Geliştirme Ortamı

Yukarı verilen bilgilerin ışığında gelişmiş Delphi uygulamaları geliştirmek mümkündür. Uygulama geliştirirken Delphi’nin kendisinden yararlanmayıp Not Defteri ile kod yazmak günümüz şartlarında iğne ile koyu kazmaya benzer olduğu için Not Defteri ile Delphi programları yazmayı bırakıp Delphi’nin kendisini kullanmaya başlayacağız.

Delphi’nin program geliştirme ortamı hakkında bilgi verirken Borland Developer Studio 2006’dan yararlanacağım. Developer Studio 2006 paketinde Delphi’den başka C++ ve C# derleyicileri bulunmaktadır. Bu dersleri izlerken Delphi’nin 7, 8, 2005 veya 2007 sürümlerini kullanabilirsiniz.

Hemen eklemek gerekirse; Borland firması Delphi ve diğer derleyicileri CodeGear adlı gruba devretti ve 2007 yılı başından itibaren piyasaya verilen sürümlerde Borland yerine CodeGear adı kullanılmaktadır. Borland Developer Studio 2007 bilgisayara kurulup çalıştırıldığında ekrana aşağıdaki gibi bir pencere gelmektedir.

 

 

Delphi penceresine kuş bakışı göz attığınızda Delphi penceresi içinde yer alan çok sayıda pencerenin olduğunu görürsünüz. Şimdilik bu pencereler üzerinde durmak yerine bir konsol uygulaması hazırlayacağım. Bu amaçla File menüsünden New-Other komutunu verip ekrana aşağıda verdiğim New Items diyalog kutusunu getirdim.

 

 

Bu diyalog kutusunun sol tarafındaki Items Categories başlıklı liste kutusunda listelenen seçenekler Delphi’nin ve Borland Developer Studio’nun bilgisayara kurulan bileşenlerine göre değişebilir. Bu liste kutusunda Delphi Projects seçili iken diyalog kutusunun sağ tarafında Console Application şablonunu seçip OK düğmesini tıklayınca aşağıdaki gibi bir Delphi penceresi ile karşılaştım.

 

 

Delphi 2006 ile konsol uygulaması hazırlayınca daha önce Not Defteri ile hazırladığımız Delphi programından farksız birkaç satıra sahip proje hazırlandı. Bu sırada Run menüsünden komut verilip Console Application şablonu ile hazırlanan proje çalıştırılırsa DOS penceresinin açılmasıyla kapanması bir olur. Çünkü Program deyiminden sonra {$APPTYPE CONSOLE} direktifi ile uygulamanın konsolda yani DOS penceresinde çalışacağı işaret edilmektedir. Delphi penceresinin bu ders boyunca yararlanmayacağım Structure, Tool Palette gibi pencerelerini kapatınca aşağıda verilen şekle dönüştü.

 

Delphi penceresinin sağ tarafındaki Project Manager penceresinde üzerinde çalışılan proje hakkında bilgi olmaktadır. Bu şartlarda Run menüsünden komut verilip bu konsol uygulaması çalıştırıldığında Delphi geri planda derleme yapıp “Project1.exe” adında bir çalışabilir program dosyası hazırlayacağı için Project Manager penceresinde bu EXE dosya işaret edilmektedir. Zaten bu sırada bu konsol uygulamasının başka bir bileşeni de yoktur.

Hatırlarsanız yukarıdaki sayfalarda Not Defteri ile hazırladığım konsol uygulamasına bir Unit dahil etmiştim. Sonra bu Unit’te basit bir procedure hazırlayıp DPR uzantılı program veya proje dosyası dahilinde Unit’teki Procedure’yi işletmiştik. Şimdi yanı işlemi tekrar yapacağım. Bu amaçla Delphi’nin File menüsünden komutu verip ekrana New Items diyalog kutusunu getirdim.

 

New Items diyalog kutusunda Unit adlı şablonu seçip OK düğmesini tıklayınca Unit1 adında bir Unit hazırlanıp üzerinde çalıştığınız uygulamaya dahil edilir. Yukarıdaki sayfalarda işaret edildiği gibi Delphi’de projenin başlangıç noktası olan ve Program deyiminin kullanıldığı DPR dosyası hariç diğer kod dosyaları birer Unit olarak düzenlenmektedir ve Unit’lerde interface ve implementation bölgeleri olmak zorundadır.

 

Anlatılan şekilde konsol uygulamasına Unit dahil edilince Project Manager penceresinde listelendi. Konsol uygulamasına Unit dahil etmenin DPR dosyasına olan etkisini göstermek için “Project1” sekmesine geçtim.

 

 

Ters renge boyadığım bu satır size bir şey ifade etmiyorsa yukarıdaki sayfalarda DPR ve PAS uzantılı 2 dosyanın aynı EXE’ye derlendiği ekran görüntüsüne bakabilirsiniz. Ters renge boyanan bu satırda hem “Unit1” proje dosyasına dahil edilmekte hem de derleyiciye söz konusu Unit’in hangi kod dosyası içinde yer aldığı işaret edilmektedir.

Şimdi konu üzerinde düşünmenizi sağlamak için bu konsol uygulamasında bir fonksiyon hazırlayıp bu fonksiyondan adı “Project1” olan DPR uzantılı proje dosyası dahilinde yararlanacağım. Neden Procedure yerine fonksiyon hazırladığımı soruyorsanız amacım fonksiyonların Delphi projelerinde nasıl hazırlandığını anlatmaktır.

unit Unit1;
interface
Function Topla():Integer;

implementation
Function Topla():Integer;
Var
   Sayi1, Sayi2 : Integer;
Begin
    Write(‘Toplanacak ilk sayi   : ‘);
    ReadLn(Sayi1);
    Write(‘Toplanacak ikinci sayi: ‘);
    ReadLn(Sayi2);
    Topla := Sayi1 + Sayi2;
End;
end.

Gördüğünüz gibi fonksiyonlar Procedure’den farklı olarak Function deyimi veya anahtar kelimesi ile tanımlanmakta ve tanımlama satırında fonksiyonun geriye göndereceği bilginin tipi işaret edilmektedir. Topla() adını verdiğim bu fonksiyon ile Integer tipinde 2 sayının toplamını bulmak istediğim için tanımlama satırını aşağıdaki düzenledim.

Function Topla():Integer;

Tıpkı Procedure’lerde olduğu gibi Unit’in Implementation bölgesinde kodladığınız fonksiyonu ayrıca Unit’in Interface bölgesinde deklare etmeniz gerekiyor. Fonksiyonlarla ilgili olarak son söyleyeceğim ise şudur: fonksiyonun geriye göndereceği değerin fonksiyon adına aktarıldığıdır. Üzerinde çalıştığım konsol uygulamasındaki Unit’te bu şekilde Topla() adında ve geriye Integer tipinde bilgi gönderen fonksiyonu hazırladıktan sonra proje dosyasına dönüp aşağıdaki gibi düzenleme yapıp bu fonksiyondan yararlandım.

Unit’teki Topla() adlı fonksiyonu işletmek üzere proje dosyasına öncelikle Var bloğunu ekleyip Integer ve String tipinde 2 değişken tanımladım. Değişken tanımlama isteğim olmasaydı Var bloğuna gerek olmazdı. Burada tanımladığım “Cevap” adlı String değişkeni programın işletimini Enter tuşuna basılıncaya kadar sürdürmek için kullanacağım.
 
Değişkenleri tanımladıktan sonra Unit1’deki Topla() fonksiyonunu işlettim. Procedure’lerde olduğu gibi fonksiyonları işletmek fonksiyonun adını yazmak şeklinde oluyor. Ancak fonksiyonlar geriye değer gönderdikleri için bu değerin bir değişkene aktarılması gerekiyor. Devamında Topla() adını verdiğim fonksiyonun geriye gönderdiği sonucu WriteLn() deyimi ile konsola yani DOS penceresine yazdım. Aynı satırda hem String hem de fonksiyonun geriye gönderdiği Integer tipindeki bilgiyi WriteLn() ile yazabilmek için Delphi’nin IntToStr() fonksiyonu ile dönüştürme yaptım. Aşağıda verdiğim ekran görüntüsünü bu konsol uygulamasını çalıştırdıktan sonra aldım.

 

Bu dersi bitirmeden ve konsol uygulamalarını anlatmayı tamamlamadan önce bazı işlemler yapacağım. Bu amaçla ilk olarak yukarıda hazırladığım konsol uygulamasına dahil ettiğim “Unit1” adlı Unit’i projeden uzaklaştıracağım. Bu amaçla Project Manager penceresinde bu Unit’e ait kısayol menüsünü açtım.

 

Projeye dahil etmiş olduğum bu Unit’i kaydetmek istiyor olsaydım bu menüden Save veya Save As komutlarını vermem gerekirdi. Bu menüden Remove Frorm Project komutunu verince söz konusu Unit’in proje ile bağlantısı kesilir ve Uses bloğundaki satır otomatik olarak silinir. Bu Unit’i konsol uygulamasından uzaklaştırdıktan sonra proje dosyasındaki Topla() adını verdiğim fonksiyonu çağırmak amacıyla hazırladığım satırları sildim.

 

 

Şimdi bu konsol uygulamasında öyle bir değişiklik yapacağım ki uygulama çalıştırıldığı zaman ekrana bir diyalog kutusunun getirilmesini sağlayacağım. Bunu yaparken Application nesnesinin MessageBox() metodundan yararlanacağım.

Yukarıda verilen proje kodunu incelerseniz {$APPTYPE CONSOLE} direktifi ile derleyiciye söz konusu uygulamanın tipi işaret edilmektedir. Bu direktif kullanılmadığı zaman Delphi derleyicisi uygulamanın grafik(GUI) olduğunu varsaymaktadır.

Bunun yanında Delphi derleyicisi her uygulama için bir Application nesnesini otomatik olarak hazırlamaktadır. Konsol uygulaması için Delphi tarafından hazırlanan Application nesnesi üzerinde işlem yapmak veya kullanmak istiyorsanız “Forms” adlı Unit’i projeye dahil etmelisiniz. Bu Unit konsol uygulamasına dahil edildikten sonra TApplication sınıfının metotları kullanılabilir. Örnek olması için konsol uygulamasında Application nesnesinin MessageBox() metodunu kullandım.

 

Bu değişiklikten sonra konsol uygulaması çalıştırılırsa ekrana aşağıda verdiğim diyalog kutusu getirilir. Projede bu diyalog kutusunu ekrana getiren satırdan başka işletilecek satır olmadığı için OK düğmesi tıklandığında konsol uygulamasının çalışması sona erer.

 

Şimdi ise bu konsol uygulaması dahilinde bir form hazırlayıp ekrana getireceğim. Bu amaçla ilk olarak TForm tipinde bir değişken tanımlayıp bu değişkeni TApplication sınıfının CreateForm() metoduna 2. parametre olarak verip form nesnesi hazırlayıp ShowModal metodu ile ekrana getirdim.

program Project1;
 {$APPTYPE CONSOLE}
uses
  SysUtils, Forms;
Var
  Form1 : TForm;
 begin
  Application.CreateForm(TForm, Form1);
  Form1.Caption := ‘Form1’;
  Form1.ShowModal;
end.

 

Bu kod işletildiğinde ekrana bir form getirilir ve bu form kapatılıncaya kadar konsol uygulaması çalışmaya devam eder. Bu şekilde Delphi’nin mevcut sınıflarından birisi olan TForm sınıfından (Delphi’nin bütün mevcut sınıflarının adının ilk harfi T’dir) yararlanılarak hazırlanan form standart özelliklere sahip olur. Bu şekilde düzenlediğim konsol uygulamasını çalıştırınca aşağıdaki gibi bir pencere ekrana geldi.

 

 

Konsol uygulaması dahilinde ekrana getirilen bu form veya pencere kapatılana kadar uygulama çalışmaya devam eder. Bir sonraki dersimizde konsol uygulamalarını bir tarafa bırakıp normal Delphi projeleri üzerinde çalışmaya başlayacağız. 

Yazan: Memik Yanık
SDN – http://shiftdelete.net

Reklam
Reklam

Yorum Ekleyin


Reklam
Reklam