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

hsbc 7. Nov 2006 18:44

Re: Anwendung wahlweise minimiert starten
 
Ich habe das ganze jetzt so gelöst:

AlphablendValue wird während des Hochfahrens auf 1 gesetzt und nach dem ev. Minimize ausgeschaltet.

Dies funktioniert zumindest mal auf meinem Rechner, ich hoffe, dass dies auf anderen ebenfalls zutrifft.

Vielen Dank jedenfalls an alle, die sich dieser Sache angenommen haben.

mfg
Herbert

Daniel Schuhmann 7. Nov 2006 19:31

Re: Anwendung wahlweise minimiert starten
 
Ging meine Idee nicht?

Alphablending geht nur bei Windows 2000 und XP (jaaa, und 2003 und Vista).

hsbc 8. Nov 2006 07:05

Re: Anwendung wahlweise minimiert starten
 
@Daniel Schuhmann

bei meinem Programm handelt es sich um ein automatisch ablaufendes Programm, welches zu festgelegten Zeiten von einem anderen Programm gestartet wird und sich nach Abarbeitung auch wieder selbständig beendet. Das Programm soll entweder nur in der Taskleiste oder ganz normal sichtbar (je nach User-Einstellung, welche aus einer ini-Datei eingelesen wird) laufen. Zusätzlich muss aber der Anwender die Möglichkeit haben, ein laufendes Programm abbrechen zu können. In meiner Anwendung selbst gibt es hierfür einen Button "Abbrechen", der natürlich nur bei sichtbarem Programm bedienbar ist. Wenn jetzt die Anwendung in der Taskleiste liegt, muss diese bei einem Klick auf das Taskleisten-Symbol sofort sichtbar werden, um es ev. abbrechen zu können.

All dies funktionierte einwandfrei, nur dass eben beim Start der Anwendung ein kurzes Aufpoppen (im Millisekunden-Bereich) zu sehen war, bevor es in die Taskleiste verschwand. Und genau diese paar Millisekunden haben eben ein paar (oder einen) User gestört.

Mit deinem Vorschlag ging es auch nicht, ich glaube, hier hatte ich keine Chance, das Programm wieder sichtbar in den Vordergrund zu bringen. Deswegen habe ich mich für Alphblending entschieden. Ich hoffe nicht, dass gerade dieser User, den das Aufpoppen stört, noch ein Windows < 2000 verwendet, wenn ja, soll er dort updaten.

Nochmals besten Dank für die Bemühungen.

mfg
Herbert


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