Delphi Program Bloklarının Yapısı

Etiket: Delphi programlama program blok 
Bu yazı bu gün 1, toplam 284 kez okundu.


Dergimizin bir önceki sayısı olan altıncı sayıda delphi fonksiyon ve prosedürlerin neler olduğunu nasıl tanımlandığını ve nasıl çağırıldıklarını anlatmıştım.

Bir unit içerisinde yer alan değişkenlerin local yada global olmasının aynı unit yada diğer unitler içerisinde nasıl erişilmesi gerektiği konusunu daha iyi anlatabilmem için delphi program blok yapısı hakkında bilgi vermem faydalı olacak kanısındayım.Bu bağlamda;


Delphi’de blokların iki parçadan meydana geldiğini belirteyim;

1* Değişken, sabit, tip ve buna benzer tanımlama bloğu
2* Program komutlarının doğrudan tanımlandığı blok


Tanımlama Blokları:

Prosedür (Procedure)-Fonksiyon (function) tanımlama bloğu

Değişken (Var) tanımlama bloğu

Sabit (Const) tanımlama bloğu

Tip (Type) tanımlama bloğu

Kod bloğu


Ayrıca her bir kaynak kodu mutlaka bir unit deklarasyonu içermelidir.Bu aynı zamanda bir unit içinde kod olarak ilk satırı teşkil etmektedir. Bir unit deklarasyonu unit ifadesi ile başlar.

unit unit1;


gibi bir tanımlama unit1.pas şeklindeki bir dosyayı işaret eder

Bir unit’i kaydettiğimizde dosyaya verdiğimiz isim aynı zamanda unit’imizin ismi olacaktır.Bir örnek ile açıklamak istersek;

Kaydedilmemiş bir unit’in tanımı unit1 unit1; şeklinde iken bu dosyayı kod ismiyle kaydederseniz unit satırınızda unit kod; olarak değişir.Delphi dosyaya verdiğimiz ismi unit ismi olarak kullandığı için unit isimlerinde değişken tanımlama kurallarına uymamız ve dosya adını değiştirmeden unit satırındadi ismi değiştirmemiz gerekir

Deklarasyon olarak bahsi geçen kelime düşünüldüğünde aklımıza ilk gelen uses deklarasyonudur.Şöyleki bir unit içerisinde kullanılacak olan diğer unitler Uses ifadesinden sonra ve aralarına ‘’,’’ (virgül) konularak tanımlanır.

Kullanacağımız prosedüre ait unit ismi Uses satırında yer almıyorsa o unit’in ismini eklememiz gerekir.Bunuda bir örnek ile açıklamam gerekirse ;

Yazıcıyla ilgili işlemler printers unit’inde tanımlanmıştır.Printer nesenesini kullanmadan önce bu unit’in ismini yukarıdaki satıra eklememiz gerekmektedir.

Deklarasyon demişken Class interface delarasyonu içinde şunu yazabiliriz.Bir Class tanımı T harfi ile başlar ama zorunlu olmamakla beraber Delphi böyle bir kodlama kullanır.


Tanımlanan İfadelerin Geçerlilik Aralığı:

Bir değişkenin tip veya procedure/function tanımlandığı yere göre çağrılabileceği bölgeler vardır.Prosedürler arasında veya unit’ler arasında ortak değişken kullanabilmek için ve bir unit’den diğer bir unit’deki prosedürü çalıştırabilmek için onları uygun yerlerde tanımlamak gerekir.

Bir değişkeni bir prosedürün Var bloğunda tanımlarsanız o değişken sadece o prosedürü kullanabilir ve buna Local (yerel) değişken denir.

Ayrıca iki prosedürün de aynı değişkeni kullanabilmesi için onları prosedürlerin Var bloğunda değil Unit’in Var bloğunda tanımlamamız gerekmektedir.

Değişkeninizi bahsi geçen Var bolğunda tanımlarsanız unit içerisindeki prosedürler bu değişkeni kullanabilir.Yani değişken Global (genel) olur.

Bir değişkene başka bir unit içerisinden ulaşabileceğiniz gibi bir unit içinde tanımlanmış bir prosedürüde başka bir unit içinden kullanabilirsiniz.Ancak bunun olabilmesi için prosedüre ait tanımı prosedürün yazıldığı unit’in interface bölümünden önce yapmanız gerekmektedir.

Delphi program bloklarının yapısı hakkında yazdıklarımı Prosedürden forma ait kontrolleri kullanma örneği ile bitirmek istiyorum.Konuyu daha iyi anlayabilmeniz için üzerinde Edit1 ve Button1 bulunan bir formumuz ve aşağıda gibi bir prosedürümüzün olduğu örneğini vereyim;

precudure A;
Begin
Edit1,Text:=’5’;
end;


Programı çalıştırırsanız Undeclared Identifler: Edit1 hata mesajını alırsınız.Bu mesajla Edit1’in tanımlanmadığını bildirilmektedir.Halbuki aynı kodu Button1’in click olayına yazdığınızda sorunsuz çalışır.

procedure Tform1.Button1Click(Sender: Tobject);
Begin
Edit1.Text.=’5’;
End;


Aynı kod bizim prosedürümüzde çalışmamakta fakat Button1’e ait bir prosedür içinde çalışmaktadır.Bu durumun iki çözümü bulunur;

1* Ya prosedürümüzde forma ait nesneleri kullanırken nesne adının başına Form1 yazmamız gerekir.

Procedure A;
Begin
Form1.Edit1.Text:=’5’;
End;


Prosedürünüzde çok sayıda nesne kulanaıyorsanız bu yöntemle kod yazmak oldukça zahmetlidir.

2* Ya da prosedürümüzü unit’nizdeki type Tform = class(Tform) ile başlayan bloktaki Private veya Public kısmında tanımlamanız gerekir.

Type
Tform1= class(Tform)
Button1: Tbutton;
Edit1: Tedit;
Procedure Button1Click(Sender: Tobject)
Private
{ Private declarations }

Public
{ Public declaritions }
prosedure A;
end;


Bu durumda prosedürümüz Tform sınıfının bir üyesi olacaktır.Bu procedure kod yazarken de prosedür isminin başına Tform1 eklemeniz gerekir.

Procedure Tform1.A;
Begin
Edit1,Text:=’5’;
End;


Bu aşamadan sonra prosedürünüz içinde forma ait nesneleri Form1 yazmaya gerek kalmaksızın kullanabilirsiniz.

Son olarak Public ile privatenin farkını belirterek konumuzu kapatalım;

Eğer bu prosedürü diğer unit’lerdende çağırmak istiyorsanız prosedür tanımını Public kısmında yapın.Bu tanımı private kısmında yaparsanız diğer unit’ler bu prosedürü kullanamazlar.


zafersat


Yorumlar


Bu dökümana henüz yorum yazılmadı.


 

İsminiz: 
E-Posta: 
Yorum: 
        

Etiket

PHP matlab Delphi interaktifdergi firefox html programlama Hyper Text Markup Language linux donanım windows önsöz debian Ubuntu Flash 8 veri tipleri değişkenler macromedia sabitler photoshop google microsoft xss google da hayat adobe anime