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 wahlweise minimiert starten (https://www.delphipraxis.net/80322-anwendung-wahlweise-minimiert-starten.html)

hsbc 7. Nov 2006 08:54


Anwendung wahlweise minimiert starten
 
Hallo allerseits,

ich weiß, dieses Thema wurde schon öfter behandelt, aber ich finde noch immer keine befriedigende Lösung.

Ich möchte, dass meine Anwendung wahlweise (aufgrund eines Parameters, welcher aus einer ini-Datei im Ereignis onCreate gelesen wird) entweder normal oder minimiert im Systemtray gestartet wird.

Bisher mache ich das so, dass ich im Ereignis OnActivate des Formulares wahlweise Application.minimize verwende, was auch funktioniert. Nur stört mich, dass beim Start des Programmes natürlich kurz das Formular aufpoppt, bevor es dann im Systemtray verschwindet. Wie kann ich das verhindern? Ich habe schon versucht, Application.minimize im Ereignis OnCreate des Formulares einzusetzen, wo es aber natürlicherweise noch nicht funktioniert.

Welche Möglichkeiten gibt es noch, das Aufpoppen des Formulares zu unterdrücken?

mfg
Herbert

Andidreas 7. Nov 2006 09:10

Re: Anwendung wahlweise minimiert starten
 
aloha...

mit der komponente cooltrayicon gibts ein ereignis das sich startup nennt...
mit dem kann man steuern ob ein programm im tray gestartet wird oder normal...

hier ein beispiel

Delphi-Quellcode:
procedure TMain_Form.TrayStartup(Sender: TObject; var ShowMainForm: Boolean);

begin
  ShowMainForm := False;
  Tray.IconVisible := True;
end;

Matze 7. Nov 2006 11:27

Re: Anwendung wahlweise minimiert starten
 
Vielleicht nicht schön, aber es müsste funktionieren und du benötigst keine Drittkomponenten. Du könntest in der Projektdatei (dpr) vor Application.Run; diesen Code ausführen:

Delphi-Quellcode:
Application.ShowMainform := false;
der dein Hautformular versteckt. Dann kannst du überprüfen, ob das Programm minimiert gestartet werden soll oder nicht und entsprechend das Formular wieder anzeigen lassen oder auch nicht.

hsbc 7. Nov 2006 12:46

Re: Anwendung wahlweise minimiert starten
 
Das mit Application.ShowMainForm funktioniert leider nicht so wie es soll.

Ich habe versuchsweise folgendes gemacht:

1. In die Projektdatei vor Applicaton.Run habe ich Application.ShowMainForm := false eingefügt.
2. In das Formular habe ich in der Eigenschaft OnActivate als erste Anweisung Application.ShowMainForm := true eingefügt.

Das Programm wird jetzt unsichtbar gestartet, es dürfte aber kein weiterer ProgrammCode ausgeführt werden, da im Ereignis OnActivate des Formulars ShowMainForm nicht mehr auf true gesetzt wird. Ich habe hier also keine Möglichkeit mehr, im ProgrammCode weitere Aktionen zu setzen.

Wahrscheinlich wird mir nichts anderes übrig bleiben, als es wirklich mit einer Dritt-Komponente zu versuchen, obwohl ich diesen Weg wirklich nur als allerletzten gehen möchte.

Vielleicht hat noch jemand eine Idee ...

mfg
Herbert

DGL-luke 7. Nov 2006 13:39

Re: Anwendung wahlweise minimiert starten
 
Wo liegt dein Problem jetzt genau?

Tumm 7. Nov 2006 13:42

Re: Anwendung wahlweise minimiert starten
 
Hast du schon probiert nach

Delphi-Quellcode:
Application.Run;
Delphi-Quellcode:
Application.Minimize;
einzufügen?

ArmyMan 7. Nov 2006 14:09

Re: Anwendung wahlweise minimiert starten
 
Ich hab mal ein bischen rumprobiert.
Du könntest unter dem
Delphi-Quellcode:
Application.CreateForm(TForm1, Form1);
die Zeilen
Delphi-Quellcode:
Application.ShowMainForm := False;
Form1.FormActivate(Form1);
einfügen.

Dann kannst du im OnActivate deiner Form die abfrage machen ob minimiert gestartet werden soll.

Greetz

Daniel Schuhmann 7. Nov 2006 15:02

Re: Anwendung wahlweise minimiert starten
 
Warum nicht einfach die Abfrage ins OnCreate der Form reintun und dort ShowMainForm einfügen? Das spart die ganze OnActivate-Geschichte.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  If FindCmdLineSwitch('tray') then
  begin
    Application.ShowMainForm := False;
    TrayIcon.Visible := True;
  end;
end;

mr-unbekannt 7. Nov 2006 15:02

Re: Anwendung wahlweise minimiert starten
 
bewirkt Form1.WindowState := wsMinimized;
das gleiche?

bei mir wird die form nicht kurz angezeigt...

hsbc 7. Nov 2006 16:00

Re: Anwendung wahlweise minimiert starten
 
Ich habe jetzt versucht, di TCoolTrayIcon zu verwenden.

Sobald ich jedoch die Komponente auf die Form ziehe und ohne irgend eine Veränderung sofort compiliere, wird nach dem Start die Form schon nicht mehr angezeigt. Ist das normal bzw. wie kann ich trotzdem die Form anzeigen lassen?

So, jetzt muss ich nochmals korrigieren:

Mein Hauptformular führt nach dem Start einige Aktionen aus, die einige Sekunden in Anspruch nehmen. Die Form wird nicht, wie ich oben beschrieb, nicht angezeigt sondern nach Abarbeitung dieser Aktionen sehr wohl angezeigt. Jetzt zu meiner Frage:

Kann ich den Ablauf insofern beeinflussen, dass die Anzeige der Form bereits z.B. am Beginn von OnFormActivate angezeigt wird und nicht erst nach Abarbeitung der gesamten Aktionen. Ein Einfügen von CoolTrayIcon.ShowMainform an dieser Stelle brachte leider auch nicht den gewünschten Erfolg.

Kennt jemand dazu vl. einen Trick?

mfg
Herbert


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