Daha önce bu sayfalarda yayınlanan Visual Basic .NET veya C# derslerini okumuş olanların bileceği gibi C#, Visual Basic .NET ve C++ .NET derleyicileri .NET Framework ile birlikte geldiği için kullanılan bilgisayara .NET Framework’ün kurulduğunda ayrıca Visual Studio veya Express Edition’a gerek olmadan Not Defteri ile program yazıp DOS penceresinde derlemek mümkündür. Benzer durum Delphi için geçerli değildir. Çünkü bir önceki derste sözü edilen Delphi paketlerinden birisi bilgisayara kurulduğunda ancak Delphi derleyicisi kullanılabilmektedir. Başka bir deyişle Borland ve yeni adıyla CodeGear firması C++ Builder’da yaptığının aksine DOS ortamında çalışan Delphi derleyicisini Delphi’den bağımsız olarak dağıtmıyor.
 
Bu derste şimdiye kadar pek karşılaşılmayan veya denenmeyen bir teknikle Delphi’yi anlatacağım. Bu tekniği denemiş olmamın en önemli nedenlerinden birisinin bu derslerin “aralıklı” olarak yayınlanıyor olmasıdır. Bu nedenle her derste anlatılan konuların veya sözü edilen kavramların o derste mutlaka anlaşılmasını hedeflemekteyim. Bu anlatım tekniğinin bugüne kadar denendiğini pek sanmıyorum. Bu anlatım tekniği çok mu gereklidir diye sorulursa cevabım:Hayır değildir. Ancak az sözle işin temelini veya geri planını anlatmayı hedeflediğimiz için bu dersler bakımından önemlidir.

.NET Framework ile birlikte C# ve Visual Basic derleyicileri ücretsiz olarak sunulmasaydı ve .NET uyumlu program geliştirmek için Visual Studio mutlaka gerekli olsaydı bu anlatım tekniğini denemeyebilirdim. Çünkü öyle sanıyorum ki C# ve Visual Basic derslerini izleyen bazı arkadaşlar Delphi hakkında yazılanlara bakacaktır. Ya da önceliği Delphi’ye vermeye baştan karar vermiş olmasına rağmen C# ve Visual Basic derslerinin daha önce yayınlanması nedeniyle C# ve Visual Basic derslerine bakmış olanların benzer anlatım tekniği ile karşılaşmalarını sağlayıp dersleri daha az sıkılarak izlemelerini hedefledim.

İşin hikaye kısmını burada bitirdikten sonra gelelim asıl konuya. Bir önceki derste söylendiği gibi kullandığınız bilgisayara Delphi 7, Borland Developer Rad Studio 2006, Turbo Delphi veya GodeGear Rad Studio 2007’den birisini kurmuş olmalısınız. Kullandığınız bilgisayara Delphi 7’yi kurduysanız DOS penceresinde derleme yaparken kullanmanız gereken dosya aşağıda işaret edilen dosyadır.

Bu dersleri izlemek veya Delphi’yi öğrenmek üzere kullandığınız bilgisayara CodeGear Rad Studio 2007’yi kurduysanız bu ders bağlamında ilgilenmeniz gereken program dosyasını aşağıda işaret ettim. Bu ders bağlamında bilgisayarınıza kurmuş olduğunuz Delphi sürümünün önemi yoktur. Diğer yandan Delphi kurulurken bu dosyanın saklandığı Bin klasörü arama yoluna dahil edildiği için istediğiniz klasörde derleme yapabilirsiniz. Benim size önerim ayrı klasör hazırlayıp bu derslerde Not Defteri ile hazırlayacağımız programı o klasöre kaydetmeniz şeklindedir.

Not Defteri veya başka bir Text editörle hazırladığınız PAS uzantılı Delphi programlarını bu EXE dosyadan yararlanarak derleyebileceğiz. Delphi projelerinde DRP uzantılı bir kod dosyası olmakta ve projeler bu dosyasından itibaren çalışmaya başlamaktadır. Ancak yukarıda işaret edilen EXE dosya ile DOS penceresinde derlenen Delphi programları için bu şart değildir ve programlarınıza PAS uzantısını verebilirsiniz. Kafaları karıştırmamak ve Delphi’nin tercihine bağlı kalmak için bu derste Not Defteri ile hazırlayıp DCC32.EXE dosyası ile derleyeceğim Delphi programlarına DRP uzantısı verdim. İşte size en kısıtlı Delphi programı.
 

Gördüğünüz gibi Delphi programları Program deyimi başlamaktadır. Daha sonra sözü edilecek Unit adlı kod dosyalarının ilk satırında Unit deyimine yer verilmektedir. Diğer yandan Delphi programlarında kod satırları Begin-End deyimleri ile sınırlanan alana yazılmaktadır. Bu 3 satırdan meydana gelen Delphi programı hatasızca derlenir ama herhangi bir işlem yapmaz. DOS penceresinde derleme işlemini nasıl yaptığımı aşağıda görebilirsiniz.

DOS penceresine önce yukarıda işaret ettiğim EXE dosyanın adını, ardından derlemek istediğim Delphi programının adını yazıp Enter tuşuna basınca yazdığım kısa program derlenip “ilk.exe” adında bir EXE dosya hazırlandı. Şimdi bu programda değişiklik yapıp ekrana bilgi yazmayı deneyeceğim.

Delphi programlarında DOS penceresinde yani konsola bilgi yazılmak istendiği zaman Write veya Writeln deyimleri kullanılmaktadır. Burada dikkatinizi {$APPTYPE CONSOLE} satırı çekmiş olabilir. Bu bir derleyici direktifidir. Başka bir deyişle bu satırda derleyiciye programı konsol uygulaması olarak derlemesi gerektiği söylenmektedir.

Bu satır programa yazılmazsa derleyici derlenmek istenen programın GUI yani Windows penceresine sahip olduğunu varsayar. Bu şartlarda yani {$APPTYPE CONSOLE} satırı yokken derleme yapılırsa derleme sırasında hata meydana gelmez ama program çalıştırılmak istendiğinde hata meydana gelir. Bu programı derleyip DOS penceresinde çalıştırınca aşağıdaki gibi bir sonuç aldım.

DOS penceresinde çalıştırmak üzere hazırladığınız Delphi programınıza {$APPTYPE CONSOLE} satırını eklemediyseniz derleme yaparken programın konsolda çalışacağını aşağıdaki gibi işaret edebilirsiniz

Buraya kadar anlatılanları özetlemek gerekirse şunlar söylenebilir: Kullandığı bilgisayara Delphi gibi görsel bir program geliştirme aracını kuran birisi doğal olarak IDE adı verilen tümleşik program yazma ortamında bir Windows uygulaması hazırlayıp uygulamanın formuna değişik kontrolleri yerleştirip çalıştırır. Biz ne mi yapmayı çalışıyoruz? Genel alışkanlığın tersini yapmaya çalışıyoruz. Çünkü amacımız sizleri Delphi ile program geliştirmeye hazırlamaktadır. Yoksa üçer beşer gün ara ile yayınlanan birkaç derste Delphi ile ilgili her şeyi anlatma gibi bir iddiamız yoktur.

Sizleri Delphi programcısı olmaya hazırlarken yazdığım her şeyin ilk okumada anlaşılması gibi bir gibi ön şartımız var. Bu nedenledir ki konulara balıklama dalmayıp adım adım ilerliyoruz. Şimdi yukarıda hazırladığım ve “ilk.drp” adını verdiğim Delphi programında küçük değişiklikler yapacağım.

program ilk;
  {$APPTYPE CONSOLE}
Var
   Yil : Integer;
Begin
   Write(‘Hangi Yildayiz : ‘);
   ReadLn(Yil);
End.

Bu kodla yukarıda verilen arasındaki en önemli fark Var bloğuna yer vermiş olmamdır. Visual Basic, C, C++ ve C# gibi dillerin aksine Delphi ve Pascal’da değişken tanımlanmak istendiği zaman Var bloğuna yer verilir. Var bloğunda değişken tanımlanırken önce değişkenin adı, ardından değişkenin tipi işaret edilir. Bu Delphi programında Write deyimi ile ekrana “Hangi Yıldayız” mesajını yazdıktan sonra ReadLn() deyimi kullanıcının konsoldan bilgi girmesini istedim.

ReadLn() deyimine daha önce tanımladığım “Yil” adlı değişkeni parametre olarak verdiğim için kullanıcının girdiği yıl bilgisi bu değişkene aktarılır. Kullanıcının konsoldan gireceği bilgi Integer tipindeki değişkene aktarılacağı için kullanıcı tam sayı bilgi girmezse hata meydana gelir.

Şimdi bu kısa örneğe ekleme yapıp kullanıcının girdiği yıl bilgisini ekrana yazacağım. Yukarıda Write() deyimine sabit bir bilgiyi parametre olarak vermiştik. Burada “Yil” değişkenin içeriğini yazdırmak istediğim için WriteLn() deyimini aşağıdaki gibi kullanıp bu değişkenin içeriğini ekrana yazdım.

program ilk;
 {$APPTYPE CONSOLE}
Var
  Yil : Integer;
Begin
  Write(‘Hangi Yıldayız : ‘);
  ReadLn(Yil);
  WriteLn(Yil);
End.

Bu şekilde düzenlenen Delphi programı DOS penceresinde derlenip EXE dosya hazırlanıp çalıştırılırsa aşağıdaki gibi bir sonuç alınır. Kullanıcının girmiş olduğu “Yil” bilgisi Writeln ile ekrana yazıldıktan sonra programın çalışması sona erer.

“Yil” değişkenine aktarılmak üzere kullanıcı konsoldan bilgi girerken kendisine Write deyimi ile mesaj verip girmesi gereken bilgi hakkında bilgi verdik. Şimdi koda ekleme yapıp girilen yıl bilgisini ekrana yazmadan önce ekrana mesaj yazacağım. Bu amaçla yukarıda verdiğim örneği aşağıdaki gibi düzenledim.

ilk.drp” adını verdiğim bu Delphi programını dikkatlice incelerseniz Uses bloğuna yer vermiş olduğumu fark edersiniz. Nasıl ki değişken tanımlama gereği duyulduğunda Var bloğuna yer vermek gerekiyorsa Delphi ile birlikte gelen hazır Unit veya Library adı verilen modüllere gerek duyulduğunda uses bloğuna yer vermek gerekiyor.

Bu örnekte Uses bloğunda Delphi’nin SysUtils adlı hazır Unit’ini koda dahil ettim veya bu Unit’e gerek duyduğumu ifade etmiş oldum. Çünkü tamsayı bilgi içeren Integer tipindeki “Yil” değişkenin içeriğini String bilgiye dönüştürmek istiyorum. Bu işlemi yapacak Delphi fonksiyonu ise bu Unit’te bulunmaktadır. IntToStr() fonksiyonu Integer tipindeki bilgileri String bilgiye dönüştürmektedir.

Bu örnekte tek WriteLn ile hem string sabiti hem de Integer tipindeki “Yil” değişkenin içeriğini ekrana yazdırmak istediğim için dönüştürme yaptım. Bu şekilde düzenlenen Delphi programı DOS penceresinde derlenip çalıştırılırsa aşağıdaki gibi bir sonuç alınır.

Buraya kadar anlatılanlara göre üzerinde çalıştığınız DRP veya PAS uzantılı kod dosyasında mevcut bir Unit veya kod dosyasından yararlanmak istiyorsanız bunu Uses bloğunda işaret etmeniz gerekir. Delphi programlama dili ile program yazarken gerek duyacağınız Delphi fonksiyonları ve metotları Delphi ile birlikte Unit’ler şeklinde gelmektedir. Sizler hangi Unit’i kullanmak istiyorsanız onu kod dosyanıza Uses bloğunda dahil etmelisiniz. İleriki derslerde çok sayıda Unit hakkında bilgi sahibi olacaksınız. Eğer Delphi öğrenmeye yeni başladıysanız biraz sabırlı olup bir süre bu derslerde anlatılanlarla yetinmenizi öneriyorum.

Bu sayfalarda yayınlanacak Delphi konulu 4. veya 5. dersten sonra işin özünü zaten kavramış olacağınız için neyi nerede bulup neleri öğrenmeniz gerektiğine kendiniz karar verebilecek noktaya zaten geleceksiniz. Bu dersi bitirmeden yukarıda verdiğim örneğe tekrar müdahale edip program çalıştırıldığında kullanıcıdan 2 tam sayıyı isteyip bunları toplayıp sonucu ekrana yazacağım. Bu amaçla “ilk.drp” adını verdiğim kod dosyasını aşağıda verdiğim şekle dönüştürdüm.

Acele etmeyelim, paniklemeyelim ve bu kodu ilk satırdan itibaren inceleyelim. Çünkü bu kısacık kodda Delphi ve Pascal programcılığının özü var. Bu örnekteki {$APPTYPE CONSOLE} satırının ve Uses bloğunun işlevini zaten biliyoruz. Burada yabancısı olduğumuz(ya da öyle sandığım) Procedure deyiminin kullanıldığı satır ve devamındaki Begin-End bloğudur. Yukarıdaki sayfalarda örneğin ilk halinde yani yalnızca bir Begin-End bloğu vardı ve End deyiminin sonunda nokta(.) işareti vardı. Hemen önemli bir noktayı işaret edeyim: Delphi programlarında sonuna nokta(.) konulan bir tek begin-end bloğu olur ve blok programın çalışmaya başladığı bloktur. Programın işletimi sonunda nokta olan End deyimine geldiğinde çalışması sonra erer.

Bu bilginin ışığında yukarıda verilen kod veya DRP dosyası incelediğinde sonu nokta ile biten begin-end bloğunda herhangi bir satır olmadığı için programın çalışması hemen sona erer. Bu kodda yukarıdakinden farklı olarak Topla() adını verdiğim bir procedure(nesneye yönelik programcılıkta procedure’lere metot adı verilmektedir) bulunmaktadır. Şimdi bu koda ek yapıp kodun başlangıç noktası olan ve sonu nokta(.) ile işaret edilen blokta Topla() adını verdiğim procedure veya yordamı işleteceğim.

program ilk;
 {$APPTYPE CONSOLE}
Uses
  SysUtils;
Procedure Topla();
 Begin
    WriteLn(‘Topla adlı procedure işletildi’);
 End;
 Begin
    Topla();  
 End.

Gördüğünüz gibi Delphi’de mevcut proceure’leri işletmek için adını yazmak yeterli oluyor. Bu şekilde değiştirilen Delphi programı derlenip hazırlanan EXE dosya çalıştırılırsa direk programın başlangıç noktası olan ana yani sonu nokta(.) ile biten begin-end bloğuna gidilir. Bu blokta Topla() adlı yordamı işleten bir satır olduğu için programın işletimi bu procedure’e geçer.

Bu procedure’nin işletimi tamamlandığında programın işletimi tekrar ana bloğa geçer. Sonu nokta ile biten ana blokta başka satır olmadığı için programın çalışması hemen sona erer. Aşağıda verdiğim ekran görüntüsünü bu şekilde değiştirdiğim programı derleyip çalıştırdıktan sonra aldım.

Yukarıda Topla() adını verdiğim procedure ile kullanıcıdan toplanmak üzere 2 sayı isteyip bunları toplayıp sonucu ekrana yazacağımı söylemiştim. Bu nedenle bu procedure’de değişiklik yapacağım. İlk olarak bu procedure’de değişken tanımlayabilmek için var bloğuna yer verip integer tipinde 3 değişken tanımladım.

Bu değişkenleri Topla() adını verdiğim Procedure’nin var bloğunda tanımladığım için ancak Procedure’nin sınırları içinde kullanılabilirler. Topla() yordamından çıkıldığında bu değişkenler tanımsız duruma düşerler. Konunun devamında bu konuda ek bilgi verilecektir. Bu procedure’de kullanıcıda toplanmak üzere sayı istemek amacıyla Begin-end bloğuna aşağıdaki gibi eklemeler yaptım.

program ilk;
 {$APPTYPE CONSOLE}
Uses
  SysUtils;
Procedure Topla();

Var
   Sayi1 : Integer;
   Sayi2 : Integer;
   Sonuc : Integer;

Begin
    Write(‘Toplanacak ilk sayi   : ‘);
    ReadLn(Sayi1);
    Write(‘Toplanacak ikinci sayi: ‘);
    ReadLn(Sayi2);
    Sonuc := Sayi1 + Sayi2;
    WriteLn(”);
    WriteLn(‘Sayilarin Toplami : ‘ + IntToStr(Sonuc));
End;

Begin
   Topla();  
End.

Topla() adını verdiğim yordama yaptığım bu eklemelerde size yabancı olan bir şey yok. Bu arada Delphi ve Pascal’ın değişkenlere bilgi aktarılırken diğer dillerin aksine “:=” kullandığını fark etmiş olmalısınız. Bu şekilde değiştirdiğim Delphi programının yeni halini derleyip çalıştırınca aşağıdaki gibi bir sonuç elde ettim.

Yukarıda da denildiği gibi Sayi1, Sayi2 ve Sonuc adını verdiğim değişkenleri Topla() adlı procedure’nin Var bloğunda tanımladığım için bu değişkenler procedure dışında tanımsız duruma düşerler. Bu nedenle bu örnek aşağıdaki gibi düzenlenirse hata meydana gelir.
 

Bu kez kod uzamasın diye 3 değişkeni bir satırda tanımladım. Bu hatanın önüne geçmek için “Sonuc” değişkenini Procedure’nin Var bloğundan programın Var bloğuna almak gerekir. Bu işlemi nasıl yaptığımı aşağıda görebilirsiniz.

program ilk;
 {$APPTYPE CONSOLE}
Uses
  SysUtils;
Var
  Sonuc : Integer;
Procedure Topla();
Var
   Sayi1, Sayi2 : Integer;
Begin
    Write(‘Toplanacak ilk sayi   : ‘);
    ReadLn(Sayi1);
    Write(‘Toplanacak ikinci sayi: ‘);
    ReadLn(Sayi2);
    Sonuc := Sayi1 + Sayi2;
End;

Begin
   Topla();  
   WriteLn(”);
   WriteLn(‘Sayilarin Toplami : ‘ + IntToStr(Sonuc));
End.

Bu Dersin Özeti

Bu derste yazılanların özetlemek gerekirse şunları yazmak isterim: Bir önceki derste kısaca sözü edilen Delphi sürümlerinden birisini bilgisayarımıza kurduk. Sonra kurma işleminin başarılı olup olmadığını test etmek için Delphi’yi başlattık. Belki bazılarınız yeni bir proje hazırlayıp küçük denemeler yaptılar.

Borland firması Delphi 7 sonraki sürümlerde IDE’de yani program geliştirme ortamında köklü değişiklikler yaptı. Bu nedenle program yazım ortamı bakımından Delphi 7 diğer sürümlerden ayrılmaktadır. Ne ki bu dersler bağlamında hangi Delphi kullandığınızın önemi yoktur.

Delphi’nin herhangi bir sürümünü kurup dcc32.exe adlı dosyanın varlığını test ettikten sonra Not Defteri ile başladık Delphi programı yazmaya. Kendim “C:” sürücüsünün kök klasöründe “konsol” adında bir klasör hazırlayıp Not Defteri ile hazırladığın DRP uzantılı Delphi programlarını bu klasöre kaydettim. Derleme işlemini yapan dcc32.exe adlı dosyanın bulunduğu klasör Delphi kurulurken otomatik olarak arama yoluna dahil edildiği için DOS penceresinde istenen klasörde derleme yapılabilir. Bir sonraki derste kaldığımız yerden çalışmaya devam edeceğiz.

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