Arkadaşlar basit olabilir ama şu an keşfedemedim.
Formun üzerinden Mouse ayrılınca Formu kapatmak istiyorum
şimdiden teşekkürler
Mouse olayı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Selam...
- Aslında basit değil... Windows Message Hook olayına başvurmak lazım...
viewtopic.php?t=2104&highlight=#10317
- Basit düşünürsek, formun OnMouseMove olayına
kodunu yazmak kafi gibi görünüyor ama kazın ayağı öyle olmuyor...
- Mouse'un hızlı hareketlerini takip edemez...
- Sizin System Wide Windows Message Hook olayı ile mouse koordinatlarını, mouse formunuzun dışında olsa dahi okumasını sağlamalı; mouse işaretçisinin windows desktop üzerindeki koordinatının formunuzun desktop üzerindeki koordinatları dışında olduğunu gördüğünüzde formu kapatmasını ve ek olarak da form kapalıysa formu tekrar kapatmaya çalışmamasını sağlamanız gerekiyor...
- Aslında basit değil... Windows Message Hook olayına başvurmak lazım...
viewtopic.php?t=2104&highlight=#10317
- Basit düşünürsek, formun OnMouseMove olayına
Kod: Tümünü seç
If ( X < 1 ) OR ( X > Form1.Width-1) OR
( Y < 1 ) OR ( Y > Form1.Height-1) then Close;

- Mouse'un hızlı hareketlerini takip edemez...

- Sizin System Wide Windows Message Hook olayı ile mouse koordinatlarını, mouse formunuzun dışında olsa dahi okumasını sağlamalı; mouse işaretçisinin windows desktop üzerindeki koordinatının formunuzun desktop üzerindeki koordinatları dışında olduğunu gördüğünüzde formu kapatmasını ve ek olarak da form kapalıysa formu tekrar kapatmaya çalışmamasını sağlamanız gerekiyor...

Windows MouseLeave mesajını yakalayarak ta yapabilirsin.
Kolay gelsin.
Kod: Tümünü seç
procedure CMMouseLeave( var Msg: TMessage ); message cm_MouseLeave;
....
procedure TForm1.CMMouseLeave(var Msg: TMessage);
begin
//yapmak istediğin işle ilgili kod
end;
Selam...
- Merakımı yenemeyip yukarda anlatılanları denedim...
- Google'da aradım. Bulduklarım içerisinde beğendiğim ve de alternatif sayılabilecek bir üçüncü yöntem sunayım...
- CTRL+SHIFT+C ile yapılan otomatik ekleme Override eklenmiyor... onun için Private kısmına...
eklenecek...
- Merakımı yenemeyip yukarda anlatılanları denedim...

- Google'da aradım. Bulduklarım içerisinde beğendiğim ve de alternatif sayılabilecek bir üçüncü yöntem sunayım...
- CTRL+SHIFT+C ile yapılan otomatik ekleme Override eklenmiyor... onun için Private kısmına...
Kod: Tümünü seç
procedure TForm1.DefaultHandler(var Message); Override;

Kod: Tümünü seç
var
lpEventTrack: TTrackMouseEvent;
MouseEnter: boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
with lpEventTrack do
begin
cbSize := SizeOf(TTrackMouseEvent);
dwFlags := TME_HOVER or TME_LEAVE;
hwndTrack := Handle;
dwHoverTime := HOVER_DEFAULT;
end;
TrackMouseEvent(lpEventTrack);
end;
procedure TForm1.DefaultHandler(var Message);
begin
case TMessage(Message).Msg of
WM_MOUSELEAVE:
begin
Caption := 'Exit';
MouseEnter := false;
end;
else
inherited;
end;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not MouseEnter then
begin
Caption := 'Enter';
MouseEnter := true;
lpEventTrack.dwFlags := TME_LEAVE;
TrackMouseEvent(lpEventTrack);
end;
end;