![]() |
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 |
AW: Form MouseEnter/Leave problem
Schau doch im OnMouseLeave einfach nach, ob sich die Maus noch innerhalb des Formularrechtecks befindet.
|
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".
|
AW: Form MouseEnter/Leave problem
Zitat:
|
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; |
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.
|
AW: Form MouseEnter/Leave problem
Mit
Delphi-Quellcode:
müsste es noch eleganter gehen.
procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
|
AW: Form MouseEnter/Leave problem
Das ist in TControl doch bereits enthalten und löst OnMouseLeave aus.
|
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. |
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 10:45 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 by Thomas Breitkreuz