Entwickler-Ecke
Windows API - Frage zu TrayIcon
Der Michel - Fr 24.01.03 16:45
Titel: Frage zu TrayIcon
Hallo zusammen,
mein Programm minimiert sich automatisch in den Tray, bei Rechtsklick auf das Symbol wird ein Popupmenü eingeblendet:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var P : TPoint; begin ... case mess.LParamLo of WM_RBUTTONDOWN: begin GetCursorPos(P); PopupMenu1.Popup(P.x,P.y); end; end; |
Wenn ich in diesem Popupmenü aber nichts anklicke sondern mit der Maus woanders hinfahre bleibt es trotzdem stehen. Wie mache ich es, daß sich das PopupMenu in diesem Fall schließt?
Arbeit mit Delphi 5.
Gruß,
Michel
Delete - Fr 24.01.03 17:39
Ruf vor PopupMenu1.Popup() noch das mal auf: SetForeGroundWindow(Form1.Handle);;.
Der Michel - Fr 24.01.03 18:01
Simpel, aber effektiv.
Hat funktioniert.
Besten Dank.
:-)
Delete - Fr 24.01.03 18:04
Nur etwas Knoff-Hoff. :mrgreen:
Anonymous - Fr 24.01.03 18:18
Das Problem mit SetForeGroundWindow(Form1.Handle) ist, daß es die eigene Anwendung, beim MouseOver über dem TrayIcon, in den Vordergrund bringt. Das merkt man lange Zeit nicht. Erst wenn am irgendwann ein anders TrayIcon anklicken will und dabei über das eigene drüberfährt. Dann kommt das eigene Programm in den Vordergrund.
Ich benutze dazu eine leicht abgewandelte Variante:
Quelltext
1:
| SetForegroundWindow(GetForegroundWindow); |
Der Michel - Sa 25.01.03 14:50
Hallo,
Ein guter Einwand, werde ich demnächst mal mit experimentieren, bei dieser Anwendung ist mir das relativ egal, da ich sage:
Quelltext
1:
| Application.ShowMainForm := False; |
:wink:
Gruß,
Michel
Delete - Sa 25.01.03 17:09
| Popov hat folgendes geschrieben: |
Das Problem mit SetForeGroundWindow(Form1.Handle) ist, daß es die eigene Anwendung, beim MouseOver über dem TrayIcon, in den Vordergrund bringt. Das merkt man lange Zeit nicht. Erst wenn am irgendwann ein anders TrayIcon anklicken will und dabei über das eigene drüberfährt. Dann kommt das eigene Programm in den Vordergrund.
Ich benutze dazu eine leicht abgewandelte Variante:
Quelltext 1:
| SetForegroundWindow(GetForegroundWindow); | |
Wieso das? Der Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var P : TPoint; begin ... case mess.LParamLo of WM_RBUTTONDOWN: begin GetCursorPos(P); PopupMenu1.Popup(P.x,P.y); end; end; |
Wird doch nicht beim Drüberfahren ausgelöst, sondern erst wenn mit der rechten Maustaste auf das Icon geklickt wird. Oder hab eich da jetzt irgendwo einen Denkfehler?
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!