Label için onExit
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Label için onExit
Label için onexit olayı yok. Bunu başka bir şekilde yapabilirmiyim.
- Aslında en kolayı,
1. Shape etrafını kaplayan alanın onMouseMove olayına kontrol koyarsan, Shape'den çıkmış gibi işlem yaptırabilirsin...
2. Shape'in MouseMove olayında Mouse Koordinatlarının kenarlara yaklaştığını algıladığında shape'den çıkmış kabul edebilir, çıkmış gibi işlem yaptırabilirsin...
Ben sana aşağıda kendine göre bir Shape tasarlamanın yolunu anlatıcam...
Senin için bir örnek hazırladım...
- Teknik şöyle işliyor...
- MouseLeave isminde bir mesaj Delphi'nin shape üzerinden ayrıldığını bildirdiği bu mesajdan anlaşılıyor. Biz bunu yakalayıp değerlendiricez...
- MouseLeave olayını bir forma eklemek çocuk oyuncağı, keza bu mesajı yakalarsa çıkmış, diğer türlü MouseEnter mesajını yakalayıp formda olduğunu algılayabilirdik...
- Burada yapacağımız kendi MouseEnter, MouseLeave özelliği olan Shape nesnemizi türetipi mevcut shape(ler) özelliklerini bire bir aktardıktan sonra orjinalleri silerek bu yenilerini esas kılıcaz... Umarım anlatabilmişimdir..
Yani kısaca eski şekilleri klonlayıp ikizlerden orjinalini yokedicez...
Yeni tip tanımı yapılırken türeyen nesnelerin önüne etik olarak My ön takısını getirerek MyShape demek doğru olurdu.
Tip ailesini tanımak adına faydalıdır. Örnekte fark anlaşılsın diye bu seferlik yeni tipe TBenimSekil adını verdim. Sen düzelt...
Sadece mevcut form veya bağlı diğer formlardan erişim yapmak isteiğin doğrultusunda Public veya Private alanda aşağıdaki gibi mevcut sekillerin kadar yeni sekil değişkeni tanımla.
Sıra mouse hareketlerinde nasıl tepki vermesini istediğine geldi... MouseEnter ve MouseLeave adından da anlaşılacağı üzere mouse geldiği ve ayrıldığı zaman tetiklenen iki mesaj procedure...
Şimdiki procedure bünyesine koyduğumuz Assign procedure ile orjinal nesnenin hangi özelliklerinin klonlama işlemine tabi tutacağımızı belirtiyoruz... FormCreate olayında aktarma yapılırken aşağıdaki özellik, büyüklük ve poziyon değerleri ile renk bilgileri gibi değerleri aktarmasını istedik...
- Göreceğin üzere sadece özellikler değil OnMouseMove tanımlı kodun varsa bu dahi aktarılabiliyor...
Şimdi can alıcı nokta... FormCreate olayında Eski nesnelerin özelliklerini alıp Public veya Private tanımladığım bu yeni iki nesneye yüklüyor ve eskilerini yokediyoruz.. 
- İşlem tamam.... Artık program çalıştığında, klonlanmış yeni şekillerin eskilerinin yerlerini alıp özellikleri aktif olarak kullanılabilir kıldın..
- Tebrikler...




Senin için bir örnek hazırladım...


- Teknik şöyle işliyor...
- MouseLeave isminde bir mesaj Delphi'nin shape üzerinden ayrıldığını bildirdiği bu mesajdan anlaşılıyor. Biz bunu yakalayıp değerlendiricez...
- MouseLeave olayını bir forma eklemek çocuk oyuncağı, keza bu mesajı yakalarsa çıkmış, diğer türlü MouseEnter mesajını yakalayıp formda olduğunu algılayabilirdik...
- Burada yapacağımız kendi MouseEnter, MouseLeave özelliği olan Shape nesnemizi türetipi mevcut shape(ler) özelliklerini bire bir aktardıktan sonra orjinalleri silerek bu yenilerini esas kılıcaz... Umarım anlatabilmişimdir..




Kod: Tümünü seç
TBenimSekil = class(TShape) // Uses
procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
procedure CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
procedure Assign(Sekil:TShape);
end;

Kod: Tümünü seç
public
Yeni1 : TBenimSekil;
Yeni2 : TBenimSekil;

Kod: Tümünü seç
procedure TBenimSekil.CMMouseEnter(var Msg: TMessage);
begin
Form1.Caption := Format('Shape Adı : %s', [Name]);
Brush.Color := clYellow;
end;
Kod: Tümünü seç
procedure TBenimSekil.CMMouseLeave(var Msg: TMessage);
begin
Form1.Caption := 'Shape üzerinde değil';
Brush.Color := clBlack;
end;

- Göreceğin üzere sadece özellikler değil OnMouseMove tanımlı kodun varsa bu dahi aktarılabiliyor...

Kod: Tümünü seç
procedure TBenimSekil.Assign(Sekil: TShape);
begin
Left := Sekil.left;
Top := Sekil.top;
Width := Sekil.width;
Height := Sekil.height;
Parent := Sekil.parent;
Shape := Sekil.shape;
Brush.Assign(Sekil.brush);
Pen.Assign(Sekil.pen);
Name := 'Yeni'+Sekil.name;
OnMouseMove := Sekil.onmousemove;
end;


Kod: Tümünü seç
procedure TForm1.FormCreate(Sender: TObject);
begin
Yeni1:=TBenimSekil.Create(self);
Yeni1.Assign(shape1);
Yeni2:=TBenimSekil.Create(self);
Yeni2.Assign(shape2);
Shape1.free;
Shape2.free;
end;
- Tebrikler...
