Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TNA (SysTray) und TPopupMenu (https://www.delphipraxis.net/142010-tna-systray-und-tpopupmenu.html)

Schwedenbitter 20. Okt 2009 17:37


TNA (SysTray) und TPopupMenu
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe zwar TurboDelphi. Da ich mein Programm aber manchmal auch mit Delphi 6 compilieren muss, greife ich zum Ablegen meiner Anwendung im SysTray unter anderem auf diesen Code und nicht auf TTrayIcon zurück. Außerdem nutze ich auch ein TPopupMenu, um gleich aus dem SysTray heraus bestimmte Aufgaben gezielt durchzuführen.

Ich habe nun zwei Probleme:
  • Wenn ich den Code von Luckie unverändert ausführe, kommt bei einem Rechtsklick auf mein Tray-Icon manchmal auch das Kontextmenü der Taskleiste mit. Ich habe dann zwei sich überlappende Menüs und es ist im Grunde nicht steuerbar.
  • Wenn ich "meinen" älteren Code benutze, den ich auch von hier irgendwann einmal zusammengesucht hatte, dann kommt mein TPopupMenu zwar exklusiv. Es geht aber auch solange nicht mehr weg, bis ich auf einen der Menüeinträge geklickt habe. Das Menü bleibt bestehen, auch wenn ich irgendwo anders z.B. auf den Desktop klicke (Code ist angehängt).
Kann mir da bitte mal jemand einen Tip geben, wie ich entweder das Menü mit dem Code von Luckie exklusiv bekomme oder aber bei meinem Code das TPopupMenu wieder weg bekomme, falls der Benutzer sich z.B. nur verklickt hat.

Gruß, Alex

Mithrandir 20. Okt 2009 17:56

Re: TNA (SysTray) und TPopupMenu
 
Zitat:

Zitat von Schwedenbitter
[*]Wenn ich "meinen" älteren Code benutze, den ich auch von hier irgendwann einmal zusammengesucht hatte, dann kommt mein TPopupMenu zwar exklusiv. Es geht aber auch solange nicht mehr weg, bis ich auf einen der Menüeinträge geklickt habe. Das Menü bleibt bestehen, auch wenn ich irgendwo anders z.B. auf den Desktop klicke (Code ist angehängt).[/list]

Wenn du dir den verlinkten Quelltext mal durchguckst, wirst du bei WM_RBUTTONDOWN die Zeile
Delphi-Quellcode:
SetForegroundWindow(Handle);
finden. Diese sorgt dafür, dass beim "wegklicken" das PopupMenü verschwindet. Ich habe mir jetzt deinen Quelltext noch nicht angesehen, könnte mir aber vorstellen, dass du den mal um diesen Aufruf an passender Stelle ergänzen solltest.

Bomberbb 22. Okt 2009 10:41

Re: TNA (SysTray) und TPopupMenu
 
Hab das gleiche Problem mit Luckys Quelltext. Immer wenn ich in der Taskleiste eine anderes Programm anwähle und dann einen Rechtsklick auf mein Systrayicon mache, dann kommen beide Kontextmenüs. Leider hab ich dafür auch noch keine Lösung...

Gruß

BBB

Bomberbb 22. Okt 2009 11:00

Re: TNA (SysTray) und TPopupMenu
 
Nun, ich glaub ich hab die Lösung: das Kontextmenü der Systray (sowie auch alle andern) öffnen sich bei
Delphi-Quellcode:
WM_RBUTTONUP
und nicht bei
Delphi-Quellcode:
WM_RBUTTONDOWN
hab das bei mir gesetzt und siehe da es funzt.

Ich hab die procedure nun so implementiert:
Delphi-Quellcode:
Procedure TfrmKeyMakro.WndProc(Var Msg: TMessage);
Var
  Point                           : TPoint;
Begin
  If (Msg.Msg = WM_USER_CALLBACK) And (Msg.lParam = WM_RBUTTONUP) then
  Begin
    SetForegroundWindow(Handle);
    GetCursorPos(Point);
    pmSystray.Popup(Point.X, Point.Y);
  End ;

  Inherited;
End;


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