Entwickler-Ecke

Windows API - WM_MOUSELEAVE abfangen


wulfskin - Di 25.03.03 17:50
Titel: WM_MOUSELEAVE abfangen
Hallo!

Hab wie ein glitzekleines Problem.
Ich möchte gerne die Nachricht WM_[NC]MOUSELEAVE abfangen. Leider fangen da schon die Probleme an, ich bekomme diese Nachricht nie. In der Hilfe habe ich dann gelesen, dass ich zuerst per TrackMouseEvent dem System verständluch machen muss, dass ich diese Nachricht bekommen möchte (so habe ich es jedenfalls verstanden). Dies habe ich dann auch gemacht, aber ich bekomme diese Nachricht dann nur beim Programmstart und dann nicht mehr. Hier mein Quelltext.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
private
  procedure MouseLeave(var Msg: TMessage); message WM_MOUSELEAVE;

procedure OnCreate{...};
var
  MouseEvent: tagTRACKMOUSEEVENT;
begin
  with MouseEvent do begin
    cbSize := SizeOf(MouseEvent);
    dwFlags := TME_LEAVE;
    hwndTrack := Application.Handle;
    dwHoverTime := HOVER_DEFAULT;
  end;
  TrackMouseEvent(MouseEvent);
Hat jemand eine Ahnung was daran falsch ist, bzw. warum ich die Nachricht nicht bekomme?

Zudem interessiert mich noch, wie Konstanten für WM_NCMOUSELEAVE aussehen und der entsprechende Flag für dwFlags (wie z.B. TME_LEAVE).

Vielen Dank für Eure Hilfe!
Hans-Peter


Aya - Di 25.03.03 18:03

Hi,

soweit ich weiß ist dafür die Message WM_MOUSELEAVE die falsche.. .;)

Versuch es mal mit CM_MOUSELEAVE

Au'revoir,
Aya~


Motzi - Di 25.03.03 18:47

@Aya: das was du meinst ist eine Control-Message, aber wulfskin meint tatsächlich WM_MOUSELEAVE bzw eigentlich WM_NCMOUSELEAVE. :wink:

Ich beschäftige mich auch gerade recht ausführlich mit dem NonClient Bereich und hab bis jetzt auch erfolglos versucht auf eine WM_NCMOUSELEAVE Message zu reagieren... Mal schaun, vielleicht wirds ja noch was..!


wulfskin - Di 25.03.03 19:04

Hallo Aya, hallo Motzi!

Eigentlich habe ich wirklich die Nachricht WM_MOUSELEAVE gemeint. Aber zu deiner Nachricht: Wo finde ich Informationen über Sie, bzw. wann wir diese den Ausgelöst (habe nix im PSDK gefunden)?
Mein Problem: Ich möchte meine ToolBar verstecken, wenn das Formular verlassen wird. In der Hilfe steht, dass diese obengenannte Nachricht genau dann verschickt wird.

Kennt jemand ne andere Lösung?

Gruß wulfskin!


Aya - Di 25.03.03 19:11

CM_MOUSELEAVE wird an ein Objekt (z.B. TForm) geschickt, sobald die Maus dieses objekt verlässt :)

Au'revoir,
Aya~


Motzi - Di 25.03.03 19:15

wulfskin hat folgendes geschrieben:
Mein Problem: Ich möchte meine ToolBar verstecken, wenn das Formular verlassen wird.

In diesem Fall ist dann wahrscheinlich doch die CM_MOUSELEAVE Message von Aya die richtige Wahl..!


wulfskin - Di 25.03.03 19:37

Ok, danke Motzi und Aya!

Es klappt wunderbar! Nur noch eine Frage: Wo bekomme ich Informationen über diese Message her, bzw. wo ist sie den Dokumentiert?
Ich möchte ja nicht wegen jeder Message die ich suche hier ins Forum posten ;)!

Danke
wulfskin