Label için onExit

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
jumper
Üye
Mesajlar: 20
Kayıt: 19 Tem 2004 01:17
Konum: Sakarya

Label için onExit

Mesaj gönderen jumper »

Label için onexit olayı yok. Bunu başka bir şekilde yapabilirmiyim.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Label yerine editbox kullansan?
Görünüşü aynı hale getirirsen problem olmaz sanırım.

Kolay gelsin...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
jumper
Üye
Mesajlar: 20
Kayıt: 19 Tem 2004 01:17
Konum: Sakarya

ya Shape

Mesaj gönderen jumper »

Teşekkür ederim. Ya Shape olsaydı?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

OnEnter olayını nasıl hallettiğini ben sorsam :) Hani OnExit koyucaz ya... MouseMove desen ayrı da ?
Resim
Resim ....Resim
Kullanıcı avatarı
jumper
Üye
Mesajlar: 20
Kayıt: 19 Tem 2004 01:17
Konum: Sakarya

Mesaj gönderen jumper »

Örneğin, mousemove olayı ile shape in rengi değişsin ama mouse üzerinde değilse eski haline dönsün.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Aslında en kolayı,

:arrow: 1. Shape etrafını kaplayan alanın onMouseMove olayına kontrol koyarsan, Shape'den çıkmış gibi işlem yaptırabilirsin...

:arrow: 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...

:arrow: Ben sana aşağıda kendine göre bir Shape tasarlamanın yolunu anlatıcam... :idea:

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

- 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... :idea:

:arrow: 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.

:arrow: 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...

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;
:arrow: 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.

Kod: Tümünü seç

  public
    Yeni1 : TBenimSekil;
    Yeni2 : TBenimSekil;
:arrow: 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...

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;

:arrow: Ş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... :)

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;
:arrow: Ş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.. :)

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;
- İşlem tamam.... Artık program çalıştığında, klonlanmış yeni şekillerin eskilerinin yerlerini alıp özellikleri aktif olarak kullanılabilir kıldın..

- Tebrikler... :wink:
Resim
Resim ....Resim
Kullanıcı avatarı
jumper
Üye
Mesajlar: 20
Kayıt: 19 Tem 2004 01:17
Konum: Sakarya

Tamamdır

Mesaj gönderen jumper »

Çok teşekkür ederim. Keşke bu yöntemi daha önce bilseydim.
Cevapla