![]() |
Mauszeiger im Form oder nicht? Ereigniss?
moin moin,
ich hab eine kleines problem. ich moechte feststellen ob der mauszeiger in das form bewegt wird oder wieder heraus. ich kann aber kein passendes ereignis finden? ich dachte an ein mousemovem aber das ist nicht so ganz das was ich brauche, da dieses ereignis bei jeder mausbewegung ausloest. ich will es aber so haben, das nur ein eregnis eintritt, wenn der mauszeiger in den clientberich des forms eintritt und wieder heraus bewegt wird. hoffe ihr habt da nen tipp für mich,thx im vorraus. bis denne, euer richard |
Re: Mauszeiger im Form oder nicht? Ereigniss?
Nimm die beiden folgenden event handler in deine Form auf:
Delphi-Quellcode:
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; |
Re: Mauszeiger im Form oder nicht? Ereigniss?
hi marabu,
danke erstmal für deine antwort, ich hab das jetz folgendermaßen geloest.
Delphi-Quellcode:
ist aber sehr naja wie so ich es ausdrücken, einmal brauch ich nen timer und es muss doch auch enfacher gehn oder ?procedure aufklappen; begin form1.label2.caption:='ok'; form1.height:=200; end; procedure zuklappen; begin form1.label2.caption:='false'; form1.Height:=30; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if (mouse.cursorpos.x > form1.Left) and (mouse.cursorpos.x < form1.Left+form1.width) and (mouse.CursorPos.y>form1.Top) and (mouse.CursorPos.y < form1.top+form1.height) then aufklappen else zuklappen; end; das mit der message hab ich auch schon gelesen, aber ich hab wenig erfahrung mit WMI, vielleicht kannst du mir ja da noch etwas helfen. und deinen code mal etwas erläutern. bis denne, richard |
Re: Mauszeiger im Form oder nicht? Ereigniss?
Das könnte etwa so aussehen:
Delphi-Quellcode:
interface type TMyForm = class(TForm) ... private ... FMouseInForm: boolean; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; public property MouseInForm: boolean read FMouseInForm; end; implementation procedure TMyForm.CMMouseEnter(var Message: TMessage); begin FMouseInForm := true; end; procedure TMyForm.CMMouseLeave(var Message: TMessage); begin FMouseInForm := false; end; |
Re: Mauszeiger im Form oder nicht? Ereigniss?
mit dem cm_mouseenter, cm_mouseleave funktioniert nur bedingt. Wenn man ein Panel über die gesammte form legt und BorderStyle auf bsNone so bekommt man die messages nicht weil die maus eben nie das Form entered sondern nur das panel was darüber liegt. Die einzig sichere methode dürfte ein lokaler mousehook sein, bzw. die timervariante.
|
Re: Mauszeiger im Form oder nicht? Ereigniss?
Vielleicht hilft das:
Delphi-Quellcode:
interface type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private FMouseInForm: boolean; procedure OnIdle(Sender: TObject; var Done: Boolean); public property MouseInForm: boolean read FMouseInForm; end; implementation procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean); var pt: TPoint; begin GetCursorPos(pt); FMouseInForm := PtInRect(ClientRect, ScreenToClient(pt)); Done := false; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnIdle := OnIdle; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz