![]() |
Anwendung in die Systemtray minimieren
Sobald meine Anwendung minimiert wird, wird der Eintrag aus der Taskleiste entfernt und in die Systemtray hinzugefügt. Sobald der User mit der linken Maustaste auf den Eintrag in der Systemtray klickt, wird die Anwendung wieder hergestellt. Wenn er mit der rechten Maustaste drauf klickt wird ein Pop-Up Menü geöffnet.
Klickt der Benutzer mit der rechten Maustaste auf den Eintrag und dann mit der linken Maustaste auf das Icon, aber neben das Pop-Up Menü welches sich ja geöffnet hat. Wird die Anwendung wieder hergestellt. Ich habe in meiner Toolbar einen Button "minimieren". Wenn darauf geklickt wird, ruf ich Application.Minimize auf. Das funzt auch immer wunderbar, nur wenn der Benutzer wie oben beschrieben die Anwendung aus der Systemtray wiederherstellt, macht das Programm nichts mehr. Es wird nicht mehr minimiert. Woran kann das liegen? in der Toolbar zum minimieren
Delphi-Quellcode:
zum wiederherstellen:
procedure TMainForm.MinimierenMenuClick(Sender: TObject);
begin Application.Minimize; end;
Delphi-Quellcode:
procedure TMainForm.Systray(var sMsg: TMessage);
begin inherited; if (sMsg.LParam = WM_LBUTTONDOWN) then begin Show; Shell_NotifyIcon(NIM_DELETE, @NIM); Application.Restore; Application.BringToFront; end else if (sMsg.LParam = WM_RBUTTONDOWN) then begin Systemtray.Popup(Mouse.CursorPos.x, Mouse.CursorPos.y); end; end; |
Re: Anwendung in die Systemtray minimieren
Zitat:
Warum verwendest Du nicht eine "fertige" Komponente, die das für Dich erledigt? z.B. CoolTrayIcon ( ![]() Diese Komponente wird hundertfach eingesetzt und hat sich bewährt. Man muss nicht jedes mal das Rad neu erfinden. ;-) |
Re: Anwendung in die Systemtray minimieren
Zitat:
|
Re: Anwendung in die Systemtray minimieren
|
Re: Anwendung in die Systemtray minimieren
Ja gut, das Beispiel hilft mir aber nicht weiter. Damit habe ich das gleiche Problem wie oben.
Die Komponente dazu zu verwenden, finde ich auch nicht für sehr sinnvoll. |
Re: Anwendung in die Systemtray minimieren
Moin!
Ich konnte deiner Beschreibung zu dem genauen Fehler nicht ganz folgen, aber ich würde dich mal bitten zu schauen ob es hier auch auftritt: ![]() Irgendwie kann ich es mit den Code nicht nachvollziehen... MfG Muetze1 (Grüsse aus Rostock nach Rostock... *g*) |
Re: Anwendung in die Systemtray minimieren
Moin Thomas!!!
Nein bei deinem Programm tritt das Problem nicht auf. Ich kann aber auch keine großen Unterschiede zwischen unseren Programmen feststellen. //Beste Grüße aus Schmarl nach Lichtenhagen.\\ |
Re: Anwendung in die Systemtray minimieren
Hallole,
habe gerade die Quellcodes in meine Applikation eingebaut. Erst den von Lucie und dann den von muetze1. Bei mir tritt ein ganz anderer Effekt auf: Programm wird in den TNA verkleinert - der Schalter im Programm Taskbar (also links vom TNA) bleibt weiterhin bestehen. Klickt man drauf, so sieht man einen Rahmen aufgehen, als ob das Programm wieder angezeigt wird. Man sieht aber kein Programm. Erst über das Icon in der TNA läßt sich das Programm wieder herstellen. Hat jemand ne Ahnung was ich Falsch mache. |
Re: Anwendung in die Systemtray minimieren
Moin!
Ja, ich habe eine Idee. Wenn du das SC_MINIMIZE nicht abfängst sondern mit inherited weiterleitest, dann passiert sowas. Ich habe mein Projekt original von der Website genommen und folgendes geändert:
Delphi-Quellcode:
zu
Procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
Begin If ( ( Message.CmdType And $FFF0 ) = SC_MINIMIZE ) Then Begin Hide; TaskBarAddIcon; End Else Inherited; End;
Delphi-Quellcode:
und es trat bei mir der beschriebene Effekt auf. Du rufst also anscheinend das Inherited auf und dadurch kommt es dazu.
Procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
Begin If ( ( Message.CmdType And $FFF0 ) = SC_MINIMIZE ) Then Begin Hide; TaskBarAddIcon; End; // Else Inherited; End; MfG Muetze1 |
Re: Anwendung in die Systemtray minimieren
Hä?
Das verstehe ich jetzt nicht. Mal abgesehen davon das die Änderung bei mir nix bringt. Immer noch gleiches Verhalten. Du schreibst > Wenn du das SC_MINIMIZE nicht abfängst sondern mit inherited weiterleitest, dann passiert sowas und dann nimmst Du das ELSE heraus. Also wird doch garantiert das SC_Minimize weitergeleitet. Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz