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 Form MouseEnter/Leave problem (https://www.delphipraxis.net/177181-form-mouseenter-leave-problem.html)

DelTurbo 22. Okt 2013 13:03

Form MouseEnter/Leave problem
 
Hi,
ich möchte mitbekommen, wann man mit der Maus in der Form ist, bzw. diese verlässt. Nun habe ich in der From einfach OnMouseEnter und Leave genommen. Leider kommt auch ein Leave wenn ich über ein Objekt fahre. z.B. Button, Label, Panels usw.

Gibt es da einen Trick? Bei allen Objekten nun das Enter und Leave einzubauen fände ich etwas komig.

Danke im voraus

DeddyH 22. Okt 2013 13:08

AW: Form MouseEnter/Leave problem
 
Schau doch im OnMouseLeave einfach nach, ob sich die Maus noch innerhalb des Formularrechtecks befindet.

DelTurbo 22. Okt 2013 13:15

AW: Form MouseEnter/Leave problem
 
Leider bekommt man auch ein Leave wenn man in die Captionbar "geht". Und danach nichtmehr. Man könnte ja in einem Timer abfragen wo die Maus ist. Aber ich dachte es geht "eleganter".

Mikkey 22. Okt 2013 13:30

AW: Form MouseEnter/Leave problem
 
Zitat:

Zitat von DelTurbo (Beitrag 1232747)
Leider bekommt man auch ein Leave wenn man in die Captionbar "geht". Und danach nichtmehr.

So soll es auch sein. Das Leave-Ereignis tritt auf, wenn der Clientbereich verlassen wird. Wenn Du also das Leave-Ereignis mitgeteilt bekommst, fragst Du die Mausposition ab, ob sie innerhalb des Clientbereichs liegt. Ist dem so, war es ein "unechter" Leave.

DelTurbo 22. Okt 2013 13:32

AW: Form MouseEnter/Leave problem
 
Ich habe es nun mit einem Timer gelöst. Klappt einwandfrei.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
   P: TPoint;
 begin
   GetCursorPos(P);
   if (P.X>Form1.Left) AND (P.X<Form1.Left+Form1.Width) AND (P.Y>Form1.Top) AND (P.Y<Form1.Top+Form1.Height) then begin
    Form1.AlphaBlendValue:=255;
   end else begin
    Form1.AlphaBlendValue:=100;
   end;

end;

DeddyH 22. Okt 2013 13:37

AW: Form MouseEnter/Leave problem
 
Das klappt aber nur solange, wie Du keine 2. Instanz von TForm1 erstellst. Soll heißen: schmeiß das "Form1" da jeweils raus.

baumina 22. Okt 2013 13:50

AW: Form MouseEnter/Leave problem
 
Mit
Delphi-Quellcode:
procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
müsste es noch eleganter gehen.

DeddyH 22. Okt 2013 13:59

AW: Form MouseEnter/Leave problem
 
Das ist in TControl doch bereits enthalten und löst OnMouseLeave aus.

baumina 22. Okt 2013 14:08

AW: Form MouseEnter/Leave problem
 
Versuchs einfach mal wahlweise:

Delphi-Quellcode:
type
  TForm56 = class(TForm)
    Label1: TLabel; // innerhalb des Panels
    Panel1: TPanel; // Panel alClient auf Form
    procedure FormMouseEnter(Sender: TObject); // so klappts nicht
    procedure FormMouseLeave(Sender: TObject);
  private
    { Private-Deklarationen }
(*    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER; // aber so gehts
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;*)
  public
    { Public-Deklarationen }
  end;

var
  Form56: TForm56;

implementation

{$R *.dfm}

(*

procedure TForm56.CMMouseEnter(var Msg: TMessage);
begin
  Label1.Visible := True;
end;

procedure TForm56.CMMouseLeave(var Msg: TMessage);
begin
  Label1.Visible := False;
end;
*)

rocedure TForm56.FormMouseEnter(Sender: TObject);
begin
  Label1.Visible := True;
end;

procedure TForm56.FormMouseLeave(Sender: TObject);
begin
  Label1.Visible := False;
end;

end.

DelTurbo 22. Okt 2013 15:53

AW: Form MouseEnter/Leave problem
 
@baumina, das ist das gleiche. Sobald man in die Captionbar geht, kommt der Leave. Der einzige unterschied ist, das man nun über Buttons, Panels usw. fahren kann ohne das ein Leave kommt.

Trotzdem danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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