Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Anwendung in die Systemtray minimieren (https://www.delphipraxis.net/42723-anwendung-die-systemtray-minimieren.html)

luckystar85 23. Mär 2005 01:13


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:
procedure TMainForm.MinimierenMenuClick(Sender: TObject);
begin
  Application.Minimize;
end;
zum wiederherstellen:
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;

MaBuSE 23. Mär 2005 08:09

Re: Anwendung in die Systemtray minimieren
 
Zitat:

Zitat von luckystar85
Sobald meine Anwendung minimiert wird, wird der Eintrag aus der Taskleiste entfernt und in die Systemtray hinzugefügt.

Es sieht so aus, als hättest Du das selbst programmiert.
Warum verwendest Du nicht eine "fertige" Komponente, die das für Dich erledigt?

z.B. CoolTrayIcon ( http://subsimple.com/delphi.asp )

Diese Komponente wird hundertfach eingesetzt und hat sich bewährt.
Man muss nicht jedes mal das Rad neu erfinden. ;-)

Luckie 23. Mär 2005 08:10

Re: Anwendung in die Systemtray minimieren
 
Zitat:

Zitat von MaBuSE
Diese Komponente wird hundertfach eingesetzt und hat sich bewährt.
Man muss nicht jedes mal das Rad neu erfinden. ;-)

Aber man muss auch nicht gleich für jeden Pipifax eine Komponente benutzen und sich dann wundern warum man von C/C++ Programmierern als Klickibunti Programmierer verschrien wird. ;)

Matze 23. Mär 2005 08:24

Re: Anwendung in die Systemtray minimieren
 
Wenn's nur um die TNA geht, hat Luckie in der Code-Library einen hervorragenden Code gepostet: TNATNA.

luckystar85 23. Mär 2005 12:04

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.

Muetze1 23. Mär 2005 12:08

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: Testprojekt.

Irgendwie kann ich es mit den Code nicht nachvollziehen...

MfG
Muetze1

(Grüsse aus Rostock nach Rostock... *g*)

luckystar85 23. Mär 2005 16:11

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.\\

FrankBrin 19. Mai 2005 10:28

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.

Muetze1 19. Mai 2005 11:35

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:
Procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
Begin
  If ( ( Message.CmdType And $FFF0 ) = SC_MINIMIZE ) Then
  Begin
    Hide;
    TaskBarAddIcon;
  End
  Else
    Inherited;
End;
zu

Delphi-Quellcode:
Procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
Begin
  If ( ( Message.CmdType And $FFF0 ) = SC_MINIMIZE ) Then
  Begin
    Hide;
    TaskBarAddIcon;
  End;
//  Else
    Inherited;
End;
und es trat bei mir der beschriebene Effekt auf. Du rufst also anscheinend das Inherited auf und dadurch kommt es dazu.

MfG
Muetze1

FrankBrin 19. Mai 2005 12:14

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:16 Uhr.
Seite 1 von 2  1 2      

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