ByHeart WebMaster
Mesaj Sayısı : 46 Kayıt tarihi : 01/01/08
| Konu: Delphi bileşen yazımı anlatım 2 C.tesi Şub. 23, 2008 3:36 pm | |
| 2.bölüm
Property
IDE’nin özellikleri tanıyabilmesi için özelliklerin Class’ın Published alanında tanımlanması gerekir. IDE bu özellikleri kullanabilmesi önce tanıması lazımdır.
Aynı zamanda özellikleri tekrar kullanabilmek için kalıcılığında sağlanması gerekir. IDE basit veri tipleri için kalıcılığın sağlanmasını otomatik olarak yapar. Integer, string, boolean basit veri tiplerindendir. Daha karmaşık yapıda olan özellikler için fonksiyonlar tanınmıştır. TMemo’da bulunan Lines özelliği bu tip özelliklerindendir.
Event
Bir özelliğin tipi metot işaretçisi ise o özellik Event olarak adlandırılır. Metot işaretçileri bir çeşit değişkendirler. Class içindeki fonksiyon ve prosedürlerin işaretçilerini tutarlar. Metot işaretçisi tanımlarken;
1. Metot işaretçisinin tipi tanımlanır.
2. Bu tip ile oluşturulmuş bir değişken, metotların çağrılması gibi çağrılır.
Type
TBOlayim = procedure(Param1: string) of object;
Burada metot işaretçisi TBOlayim’dir. Arkasından Event tanımlıyoruz.
TMyObject = class
Private
FOnMyEvent: TBOlayim;
Published
Property OnMyevent: TMyObject read FOnMyEvent write FOnMyEvent;
End;
Burada oluşan yeni Event’ımızın adı OnMyEvent’dır. Yukarıda tanımlı olan TBOlayim metot işaretci tipinden türeyen ve aynı zamanda Property’de Getter ve Setter olarak girdiğimiz FOnMyevent değişkeni metot işaretçisidir.
Şimdi form1’in Class’ında bir metot oluşturalım burada olay tetiklemeyi göreceğiz.
Olay tetikleme(Event Triggering)
Procedure MyMetot(Parameter1: string );
Daha önceden de dediğimiz gibi Bu metodu otomatik olarak Ctrl + Shift + C tuş kombinasyonları ile deklare edebilirsiniz.
Şimdi istediğiniz Class’a aşağıdaki kodları yazınz.
Var
BenimNesne : TMyObject;
Begin
BenimNesne:= TMyObje.create;
BenimNesne.OnMyevent := MyMetot;
End;
Burayı iyice anlamanızı öneririm.Yukarıda anlaşılacağı üzere Form1’de bulunan MyMetot isminde olan bir metot her hangi bir sınıfta oluşturulmuş BenimNesne nesnesinin OnMyEvent olayına atanmıştır. TMyObject sınıfında oluşturulmuş property’nin Getter’ı ve Setter’ı hükmünde olan FOnMyEvent metot işaretçisi, Form1’de bulunan MyMetot ismindeki gerçek metoda işaret eder olmuştur. Buna olay tetikleme denir. Öğrendiğimiz bu bilgilerin ardından şimdi ikinci bileşenimizi yazmaya başlayalım.
İnterface
uses
SysUtils, Classes, Controls, StdCtrls, Dialogs;
Type
TMyLabel = class (TLabel)
Private
Function GCaption: TCaption;
Procedure SCaption: TCaption;
Public
Constructor Create(AOwner: TComponent); override;
Published
Property Caption: TCaption read GCaption write SCaption;
End;
Procedure Register;// bileşenimizi kaydedeceğiz
İmplementation
Procedure Register;
Begin RegisterComponents(‘Samples’, [TMyLabel]);
End;
constructor TMyLAbel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Caption := ’0’;
end;
function TMyLabel.GCaption: TCaption;
begin
Reult := inherited Caption;
end;
procedure TMyLabel.SCaption(const Value: TCaption);
var
E, Number: Integer;
begin
Val(Value, Number, E);
if E <> 0 then
ShowMessage(’neden bir sayı girmiyorsun kardeşim ….!....’)
else
inherited Caption := Value;
end;
Şimdi kodlara bir göz atalım.
TMyLabel isminde TLabel bileşeninden türeyen bir Class’ımız var. TLabel bileşeninin bütün özelliklerini miras almıştır. Published alanında tanımladığımız Property’nin Getter’ı ve Setter’ı hükmünde olan GCaption fonksiyonu ve SCaption prosedürü tanımlanmıştır. Ata bileşenimizin üzerine yazmak için Constructor’u override ediyoruz. Bileşenimiz bileşen paletine kaydetmek için Register prosedürün kullanımına göz atıyoruz.
RegisterComponents(’Samples’, [TMyLabel]);
İlk parametre hangi sekmede olacağını gösterir. İkinci parametre bileşenimizin ismidir. Constructor’un create metodunda inherited ile ata sınıfın değişkenine işaret edilmiştir. GCaption Getter metoduna baktığımızda çıkış olarak ata sınıfın Caption’ını veriyor. SCAption Setter metoduna baktığımızda Captiona girilen sayının geçerli bir sayı olup olmadığını kontrol ediyor. Geçerli bir sayı değilse hata mesajını gönderiyoruz. Captiona girilen sayının geçerli bir sayı olması durumunda ata sınıfın Caption özelliğine bu yeni değeri atıyoruz. Şimdi aklıma geldi bileşenin create constructor’ına CAption’a sıfır değerini atamıştık. Çünkü Delphi bileşenin Caption ve tex özelliğinde bulunan string’İ bileşen ismi olarak atıyor. Bu geçerli bir sayı değildir. Programdan anlayacağınız gibi TMyLabel’a girilen sayının geçerli bir sayı olup olmadığını kontrol eder. İkinci bölüm biraz kısa oldu. Gelecek bölümde buluşmak ümidiyle vesselam | |
|