Delphi İçin Programcılık Dersleri (Bölüm 3)

Bu derslerin amacı Delphi öğrenmek isteyenlere öğrenmeleri gerekli ilk bilgileri verip Delphi'yi daha kısa sürede ve sancısız öğrenmelerini sağlamaktır. Kimseye bu derslerin tümünü okumadan Delphi konulu kitaplara bakmalarını önermem.

Unit'ler ve Delphi'nin Program Yazım Ortamı

Kısa bir tekrar: Bu derslerin amacı Delphi öğrenmek isteyenlere öğrenmeleri gerekli ilk bilgileri verip Delphi'yi daha kısa sürede ve sancısız öğrenmelerini sağlamaktır. Kimseye bu derslerin tümünü okumadan Delphi konulu kitaplara bakmalarını önermem. Yok bazı arkadaşlar benim elimde taş gibi Delphi kitabı, çok sayıda PDF ve makale var derlerse; onlara "zamanınıza ve enerjinize acımıyorsanız benim elimden birşey gelmez" demek isterim. Elinizdeki kitap Memik Yanık'ın Delphi 2007 kitabı olsa bile önceliği bu derslere verin derim.

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ı bir 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 Delphi kodunu aşağıdaki gibi düzenledim.



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 olmayacağına göre genellikle kodlar birden fazla dosya arasında dağıtılır.

Delphi projelerinde 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 bir procedure yani geriye değer göndermeyen bir metot 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 yani geriye değer göndermeyen metotların 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 proje dahilinde kullanmak istediğimi aşağıdaki gibi belirttim.



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 yapmaya. 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'teki 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ıda 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, 2007 veya 2009 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. Borland firması 2008 yılı içinde CodeGear'ı ve elindeki derleyicileri Embarcadero adlı firmaya sattı.



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 yani şablonlar Delphi'nin ve Borland Developer Studio'nun 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 ve 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 bu 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. Daha önce işaret edildiği gibi Unit'lerde interface ve implementation bölgeleri olmak zorundadır.



Anlatılan şekilde konsol uygulamasına Unit dahil edilince Project Manager penceresinde bu Unit 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 bdsproj 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' projeye 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 dbsproj 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. Aşağıda verdiğim kısacık kodda Sayi1 ve Sayi2 adında 2 değişken tanımladım. Bu 2 değişken daha önce yerli bir yazar tarafından register edildiği için Sayi1 ve Sayi2 yerine İngilizce veya argo değişken adlarını tercih etmeniz önerilir. Örneğin Sayi1 yerine Odun1, Sayi2 yerine Tomruk2'yi değişken adı olarak tercih edebilirsiniz. Benzer tehlike Topla'yı fonksiyon adı olarak seçenler içinde geçerlidir. Bu nedenle "Topla" yerine argo bir kelimeyi fonksiyon adı olarak seçmeniz önerilir.


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. Toplama sonucu bulunacakdeğer Integer olacağı için fonksiyon adından sonra Integer yazdm.


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ğer fonksiyon adına aktarılmalıdır. Üzerinde çalıştığım konsol uygulamadaki 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 sınıfının 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 sınıfının 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. Bir sonraki dersin içeriği mevcut Delphi kaynaklarına nispeten benzeyecektir.
  • Etiketler;
Memik Yanık
Hakkında bilgi yakın zamanda eklenecektir.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

teşekkürler paylaşım için :)
herşey çok güzel anlatılmış.ama bunları yapabilmem için delphi proğramına ihtiyacım var:) ama ben indiremiyorum delphi proğramını:(
Hocam ben delphi-7 kullanıyorum ve dbcombobox a kayıt girdiğimde otomatik tamamlama yapmasını istiyorum. "ahmet " kayıtlı ise " a" ya basınca ahmet gelsin. Aynı zamanda mükerrer kayıtları göstermesin. Gruplandırma yapsın ve DBComboboxa tıkladığımda verileri A-Z sıralı olarak göstersin. Biraz karmaşık olduğunu biliyorum ama lütfen bana yardımcı olurmusunuz. İlginiz için şimdiden teşekkürler...

Yukarı Git