Zitat von
rey003:
Ich habe auch schon mal nachgesehen wie das in der
VCL gemacht wird (die müssen das ja auch irgendwie hinbekommen haben)
Das funktioniert anders, da das schon zu Windows 3.1 (Delphi 1) Zeiten funktionieren musste. Dort wird in der Leerlauf-Zeit (Idle) die Mausposition abgefragt und das darunter liegende Control ermittelt. Unterscheidet sich dies vom vorher ermittelten Control, so wird für das alte ein
CM_MOUSELEAVE und für das neue Control ein
CM_MOUSEENTER ausgelöst.
Schon mal ins
PSDK geschaut? Da würdest du alle Informationen finden, die du zum Nutzen von WM_MOUSELEAVE brachst. Aber da Weihnachten noch nicht so lange her ist, bin ich mal so nett und poste hier den Code:
Delphi-Quellcode:
var
EventTrack: TTrackMouseEvent;
begin
case Msg
of
WM_MOUSELEAVE:
begin
WindowHover := False;
SetWindowText(
Handle, '
Left');
end;
WM_MOUSEMOVE:
begin
if not WindowHover
then
begin
WindowHover := True;
SetWindowText(
Handle, '
Entered');
{ WM_MOUSELEAVE soll generiert werden }
EventTrack.cbSize := SizeOf(EventTrack);
EventTrack.dwFlags := TME_LEAVE;
EventTrack.hwndTrack :=
Handle;
EventTrack.dwHoverTime := HOVER_DEFAULT;
TrackMouseEvent(EventTrack);
end;
end;
...
end;
end;