Autor Beitrag
Der Michel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Fr 24.01.03 16:45 
Hallo zusammen,

mein Programm minimiert sich automatisch in den Tray, bei Rechtsklick auf das Symbol wird ein Popupmenü eingeblendet:

ausblenden 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.01.03 17:39 
Ruf vor PopupMenu1.Popup() noch das mal auf: SetForeGroundWindow(Form1.Handle);;.
Der Michel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Fr 24.01.03 18:01 
Simpel, aber effektiv.
Hat funktioniert.
Besten Dank.
:-)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.01.03 18:04 
Nur etwas Knoff-Hoff. :mrgreen:
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden Quelltext
1:
SetForegroundWindow(GetForegroundWindow);					
Der Michel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: 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:

ausblenden Quelltext
1:
Application.ShowMainForm := False;					

:wink:

Gruß,
Michel
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden Quelltext
1:
SetForegroundWindow(GetForegroundWindow);					


Wieso das? Der Code:
ausblenden 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?