Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi wm_mouseleave fuer trayicon? (https://www.delphipraxis.net/92223-wm_mouseleave-fuer-trayicon.html)

richard_boderich 16. Mai 2007 12:44


wm_mouseleave fuer trayicon?
 
hallo

ich erzeuge mittels shell_notify ein trayicon. nun moechte ich fuer das trayicon einen mouseenter und einen mouseleave event haben. ich habe
den ganzen vormittag aufgrund eines beispieles von luckie rumprobiert und komme nicht weiter. ich habe es jetzt so versucht. mein problem ist, das
wm_mouseleave nicht eintritt. ich habe mit winsight gecheckt ob wm_mouseleave(0x2A3) auch gefeuert wird, und es ist soweit ok. die massage.lparamlo abfrage hatte ich auch schonmal komplett umgekrempelt. ich glaube naehmlich , das ich bei wm_mouseleave auf Message.MSG abfragen muss, denn bei wm_mouseleave sind alle
parameter laut MSDN mit dem wert 0 versehen. nur wie gesagt wm_mouseleave tritt nie ein bzw. der programhalt wird nicht durchgefuert.
hoffe das mir jemand helfen kann. danke fuer eure zeit.

richard


Delphi-Quellcode:
Procedure TForm1.WMTaskBarEvent(Var Message: TMessage);
Var
  Pt : TPoint;
  eventtrack: TTrackMouseEvent;
  result:longbool;
Begin
  Case Message.LParamLo Of
    WM_LBUTTONDown :
      Begin
         if PopupactionbarEx1.MenuActive then PopupactionbarEx1.PopupMenu.CloseMenu;
      End;
    WM_RBUTTONDown :
      Begin
        SetForegroundWindow(Handle);
        PostMessage(Handle, WM_NULL, 0, 0);
        GetCursorPos(Pt);
        if PopupactionbarEx1.menuactive=false then PopupactionbarEx1.Popup(Pt.x, Pt.y-10)
        else PopupactionbarEx1.PopupMenu.BringToFront;
      End;
    WM_LBUTTONDBLCLK:
      Begin
        // nochnix
      End;

    WM_MOUSEmove:
      Begin

       EventTrack.dwFlags := TME_LEAVE;
       EventTrack.hwndTrack := Handle;
       EventTrack.cbSize := SizeOf(EventTrack);
       result:=TrackMouseEvent(EventTrack);

      End;

    WM_Mouseleave:
      Begin
       halt; //nur um zu sehen ob es geht
      End;

  End;
End;

Luckie 16. Mai 2007 13:03

Re: wm_mouseleave fuer trayicon?
 
Erste Satz aus der Hilfe:
Zitat:

The WM_MOUSELEAVE message is posted to a window when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent.
Ein Icon ist kein Fenster Höchstens die INA selber. Davon mal abgesehen, warum initialisiert du die TrackMouseEvent-Struktur bei jeder Mausbewegung? Und EventTrack.hwndTrack := Handle; warum gibst du dort das Fensterhandle an? Du willst doch, dass die Nachricht ausgelöst wird, wenn die Maus das Icon in der TNA verlässt:
Zitat:

hwndTrack
Specifies a handle to the window to track.

richard_boderich 16. Mai 2007 13:07

Re: wm_mouseleave fuer trayicon?
 
erstmal danke fuer deine antwort luckie. ich habe in meiner verzweiflung schon alles durchprobiert. das ist nur die letzte version meines codes.
das mit dem client bereich ist mir klar. jedoch gibt es auch eine wm_ncmouseleaves message, die fuer solche faelle nutzbar sein durefte? oder etwas nicht?

gruss richard


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