Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Programm abhängig von Runtimeparameter unsichtbar starten (https://www.delphipraxis.net/154141-programm-abhaengig-von-runtimeparameter-unsichtbar-starten.html)

iphi 29. Aug 2010 19:33

Programm abhängig von Runtimeparameter unsichtbar starten
 
Hallo,

ich habe ein größeres VCL-Programm, welches ich im Falle des Starts mit einem bestimmten Runtime-Parameter unsichtbar starten möchte, einige Funktionen von der Main Form ausführen möchte und dann wieder beenden möchte.

Sehe ich das richtig, dass ich in der Main.dpr den Runstring vor Application.Run abfragen und dann ggf. Application.ShowMainForm := False; setzen muss?

Wo muss dann mein weiterer Code für den unsichtbaren Fall stehen? Muss im unsichtbaren Fall Application.Run überhaupt aufgerufen werden?

Gruss Iphi

himitsu 29. Aug 2010 19:46

AW: Programm abhängig von Runtimeparameter unsichtbar starten
 
Application.Run fürh die Nachrichtenschleife aus,
also wenn du diese brauchst, dann sollte man das nicht entfernen.

PS: Wenn ich ein Fenster garnicht anzeigen will, dann laß ich es erst garnicht erstellen.


Im Grunde kommt es aber drauf an, was und wie du es nun ausführen willst, wenn keine GUI angezeigt wird.
Wenn das klar ist, dann kann man erst entscheiden was man machen muß/kann, um dieses zu erreichen.

iphi 29. Aug 2010 20:01

AW: Programm abhängig von Runtimeparameter unsichtbar starten
 
Im Prinzip will ich alle Funktionen der GUI benutzen, nur das Fenster nicht anzeigen.
Ich möchte also das, was normalerweise sichtbar abläuft (Datenerfassung mit grafischer Darstellung und am Ende Ausgabe in Datei) unsichtbar ablaufen lassen.

Wie strukturiere ich das?

SirThornberry 29. Aug 2010 20:06

AW: Programm abhängig von Runtimeparameter unsichtbar starten
 
Hast du Oberfläche und Programmlogic voneinander getrennt? Wenn dem so ist kannst du die Oberflächenerzeugung weg lassen und nur die Programmlogic ausführen.

iphi 29. Aug 2010 20:25

AW: Programm abhängig von Runtimeparameter unsichtbar starten
 
Zitat:

Zitat von SirThornberry (Beitrag 1045958)
Hast du Oberfläche und Programmlogic voneinander getrennt? Wenn dem so ist kannst du die Oberflächenerzeugung weg lassen und nur die Programmlogic ausführen.

Das habe ich dummerweise nicht getan und das Programm ist zu umfangreich, das jetzt nachträglich noch zu ändern. Kann man nicht das Programm einfach mit FormMain.Visible=false starten?

Wo baue ich dann meine Programmlogik ein?

wicht 29. Aug 2010 20:50

AW: Programm abhängig von Runtimeparameter unsichtbar starten
 
Hi,

ShowMainForm := False oder Visible := False sind dann wohl fast deine einzigen Möglichkeiten. Solange keine Interaktion vom Benutzer nötig ist (beachte auch Fehlerfälle, wenn zum Beispiel falsche Daten vorliegen, eine Datei nicht existiert, etc. - dann sollte *keine* MessageBox kommen), sollte das auch hinhauen.
Trennen könnte man es zum Beispiel, in dem man eine Klasse TAnalyzer baut, die als Methode zum Beispiel AnalyzeStart() hat. Das Form würde eine Instanz dieser Klasse erzeugen und die Datenverarbeitung mit AnalyzeStart() anhauen. Weil du ja Daten noch grafisch darstellen möchtest, hätte die Klasse TAnalyzer einen oder mehrer Events, an die sich das Form verbindet. Über die Events gibt die Klasse TAnalyzer, die die Daten hält und verarbeitet, dann Infos an das Fenster weiter, so dass da zum Beispiel eine Kurve oder sonstwas mit Hilfe der Daten aus dem Event gemalt werden kann. Und wenn du jetzt eine Version bauen wolltest, die kein Fenster mehr hat, erstellst du einfach eine Instanz dieser Klasse (Code in der .dpr-Datei, wo auch das Application.* alles steht) und rufst dann AnalyzeStart() auf - das Fenster ist dann nicht mehr nötig und die Logik ist von der Oberfläche schön getrennt. So ist es dann auch ganz einfach möglich, nebenbei noch ein Konsolenprogramm oder einen Dienst anzubieten. Alle 3 Programme würden dann genau das selbe machen, weil die Logik dank TAnalyze überall die gleiche ist.
Seitdem ich mir diese Vorgehensweise angewöhnt habe, ist mein Leben schöner geworden. Hört sich doof an, ist aber so :P

Liebe Grüße


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