![]() |
Starten wahlweise mit und ohne GUI
Ich hätte eine konzeptionielle Frage und zwar habe ich ein Programm das einerseits in einer Batchdatei mit Parameter aufgerufen wird, wo kein Fenster aufpoppen soll, und falls kein Parameter mitgegeben wird, soll es mit GUI gestartet werden. Derzeit löse ich so:
Delphi-Quellcode:
Falls ein Parameter angegeben wurde, wird es ausgeführt und danach das Programm in FormCreate brutal mit "Halt" beendet. Funktionert eigentlich auch zufriedenstellend. Doch vermutlich gibt es elegantere Lösungen. :oops: Wie könnte man es besser machen?
procedure TForm1.FormCreate(Sender: TObject);
begin case paramcount of 1: begin showmessage('Zuwenige Parameter. Programm wird fortgesetzt.'); end; else begin Mach_Was_ohne_GUI(paramstr(2)); //Parameter wurde angegeben Halt; end; end; end; lg, jus |
AW: Starten wahlweise mit und ohne GUI
Hallo jus, ja es gibt einen eleganteren Weg der auch Deine Applikation schneller macht! (Jedenfalls wenn ein Parameter übergeben wurde) :-)
Mach das in .dpr ohne vorher GUI zu laden. edit also so wie hier in diesem Beispiel:
Delphi-Quellcode:
War es das was Du meintest?
program DFK;
uses Forms, uMain in 'uMain.pas' {frmKnips}, uClear in 'uClear.pas' {frmClear}; {$R *.res} begin if ParamCount = 0 then // wenn keine Parameter angegeben wurden, dann lade die GUI begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.Title := 'Der Fenster Knipser by KodeZwerg'; Application.CreateForm(TfrmKnips, frmKnips); Application.CreateForm(TfrmClear, frmClear); Application.Run end else begin // Code ohne GUI fängt hier an.... // Du musst in Uses das einbinden wo Du ohne GUI Zugriff drauf benötigst, eventuell Windows.pas für API? end; end. |
AW: Starten wahlweise mit und ohne GUI
Wir speichern Application dort in eine eigene Variable, damit die IDE an der Stelle nicht immer versucht automatisch etwas zu ändern, z.B. wenn man ein neues Formular hinzufügt.
Sprich:
Delphi-Quellcode:
var
App: TApplication; begin App := Application; if ... begin App.Initialize; ... |
AW: Starten wahlweise mit und ohne GUI
@KodeZwerg
Ja stimmt, einfach in die dpr schreiben. Die Lösung lag eigentlich auf der Hand, aber im nachhinein ist man immer schlauer. :oops: Vielen Dank! @jaenicke Vielen Dank für den coolen Trick! lg, jus |
AW: Starten wahlweise mit und ohne GUI
Zumindest bisher ist es offenbar so, daß die IDE sämtlichen Code vor dem
Delphi-Quellcode:
in Ruhe lässt. Deswegen wäre auch dieser Ansatz eine mögliche Lösung, bei der die automatischen Eingriffe der IDE weiterhin möglich bleiben:
Application.Initialize
Delphi-Quellcode:
Es ist allerdings zu beachten, daß mit diesen Tricks immer noch kein Konsolenprogramm daraus wird. Insbesondere werden irgendwelche Aufrufe von Write/-ln und Read/-ln auf die impliziten IO-Kanäle Input und Output nicht funktionieren.
begin
if ParamCount > 0 then begin { Kommandozeile abarbeiten } Halt(0); end; Application.Initialize; Application.MainFormOnTaskbar := True; ... end. |
AW: Starten wahlweise mit und ohne GUI
Warum ermorden (
Delphi-Quellcode:
) eigentlich immer welche ihre Anwendung, anstatt das zu machen, was sie eigentlich wollten?
Halt(0);
Also die Anwendung Ausführung abzubrechen (
Delphi-Quellcode:
).
Exit;
|
AW: Starten wahlweise mit und ohne GUI
Den Code zum Auswerten/Abarbeiten der Parameter würde ich auslagern in eine andere Unit
Delphi-Quellcode:
In der DPR genügt dann eine Zeile Code:
unit CmdLineProcessor;
interface function ProcessCmdLine() : Boolean; implementation function ProcessCmdLine() : Boolean; begin // Hier eigentlich etwas sinnvolles mit den Parametern anfangen Result := ParamCount > 0; end;
Delphi-Quellcode:
begin
if ProcessCmdLine() then Exit; Application.Initialize; Application.MainFormOnTaskbar := True; ... end. |
AW: Starten wahlweise mit und ohne GUI
Zitat:
|
AW: Starten wahlweise mit und ohne GUI
Spielt keine Rolle ob Halt oder Exit verwendrt wird. Tot ist tot. Mund Windows räumt automatisch nach Ende des Proceses auf.
|
AW: Starten wahlweise mit und ohne GUI
Ich gehe da mehr nach Anleitung,
Zitat:
Bei Halt() werden da nicht alle Close-Events übersprungen und es geht direkt zum Ende ohne Möglichkeit sein Programm aufzuräumen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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