Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mauszeiger im Form oder nicht? Ereigniss? (https://www.delphipraxis.net/43760-mauszeiger-im-form-oder-nicht-ereigniss.html)

richard_boderich 8. Apr 2005 11:03


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

marabu 8. Apr 2005 12:26

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;

richard_boderich 8. Apr 2005 13:10

Re: Mauszeiger im Form oder nicht? Ereigniss?
 
hi marabu,

danke erstmal für deine antwort, ich hab das jetz folgendermaßen geloest.

Delphi-Quellcode:

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;
ist aber sehr naja wie so ich es ausdrücken, einmal brauch ich nen timer und es muss doch auch enfacher gehn oder ?
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

marabu 8. Apr 2005 13:28

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;

SirThornberry 8. Apr 2005 13:34

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.

marabu 8. Apr 2005 15:59

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 09:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz