Entwickler-Ecke
Windows API - HidePopupMenu - PopupMenu schliessen, wenn Klick ausserhalb
galagher - Fr 09.10.09 15:42
Titel: HidePopupMenu - PopupMenu schliessen, wenn Klick ausserhalb
Hallo zusammen!
Habe hier:
http://www.swissdelphicenter.ch/de/showcode.php?id=2262 folgenden Code gefunden, den ich gebrauchen kann:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure HidePopupMenu; begin PostMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, 0); PostMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, 0); end; |
Ich habe ein Programm, dass im SysTray als Symbol liegt, man kann es per PopupMenu wieder aktivieren. Wenn man nun ausserhalb des PopupMenu's klickt, zB. auf die Taskleiste, möchte ich, dass sich das PopupMenu schliesst und weiters nichts ausgeführt wird.
Dazu habe ich folgende Fragen:
-> Wie stelle ich fest, ob sich die Maus innerhalb des PopupMenu's befindet? (Ist das dazu überhaupt nötig?)
-> Wo baue ich obigen Code ein, damit sich das PopupMenu schliesst?
galagher - Mo 12.10.09 21:15
Weiss denn dazu niemand etwas?
Lannes - Mo 12.10.09 23:15
Hallo,
hab auch einige selbst entwickelte Programme im Bereich SysTry, deren Popup schließt sich eigemtlich automatisch, wenn man daneben klickt. Wie realisierst Du das Popup-Menü in Deinem Programm?
galagher - Di 13.10.09 17:40
Lannes hat folgendes geschrieben : |
| Wie realisierst Du das Popup-Menü in Deinem Programm? |
Mit einer Komponente TDFTrayIcon. Macht eigentlich alles perfekt und man kann ihr ein PopupMenu zuweisen. Ich verstehe zwar, dass dieses dann sein eigenes Ding macht, aber nicht, dass es sich nicht wieder schliesst, wenn man "daneben" klickt.
TDFTrayIcon zeigt das PopupMenu in
procedure TDFTrayIcon.DoRightClick; mit
PopupMenu.Popup(Pos.X, Pos.Y); an.
Lannes - Di 13.10.09 19:47
Hallo,
Auszug aus der unit DFTrayIcon:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if assigned(FPopupMenu) then begin PopupMenu.Popup(Pos.X, Pos.Y); end; |
Hast Du mal bei SetForeGroundWindow die Auskommentierung entfernt?
In meinem Code ist die Zeile aktiv.
Noch das aus DFTrayIcon:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TDFTrayIcon.WndProc(var msg: TMessage); case LParam of WM_RBUTTONUP: begin DoRightClick; end; |
Bei mir wird bei WM_RBUTTONDOWN das Popup aufgerufen.
Sind aber alles nur Vermutungen, habe es nicht getestet.
galagher - Di 13.10.09 20:18
Lannes hat folgendes geschrieben : |
| Hast Du mal bei SetForeGroundWindow die Auskommentierung entfernt? |
Bei mir ist die Zeile auskommentiert - und was soll ich sagen? Ich habe sie aktiviert, und es klappt wie es sein soll! :D
Vielen Dank!
galagher - Mi 14.10.09 18:19
Da fällt mir doch noch etwas ein:
Es tritt bei der merkwürdige Effekt auf, dass, wenn das Projekt in Delphi geladen ist und ich Delphi minimiere, dass dann kein Taskbar-Button von Delphi sichtbar ist!
Und es wird noch besser: Wenn ich auf "Datei/Alle schliessen" klicke, und dann Delphi minimiere, gibt's ebenfalls keinen Delphi-Taskbar-Button - obwohl das Projekt nicht mehr geladen ist!
Öffne ich Delphi hingegen mit einem anderen Projekt oder einfach ohne Projekt, tritt der Effekt nicht auf!
Ich habe zwar ShowWindow(GetWindow(Handle,GW_OWNER), SW_HIDE); in meinem Code, aber auch, wenn ich diese Zeile auskommentiere, ändert das nichts!
Ist ja im Grunde egal, denn wie gesagt, ansonsten verhält sich Delphi bzw. Windows ja normal, aber warum ist das so?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!