AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Starten wahlweise mit und ohne GUI

Ein Thema von jus · begonnen am 5. Jun 2018 · letzter Beitrag vom 6. Jun 2018
Antwort Antwort
Seite 1 von 3  1 23      
jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#1

Starten wahlweise mit und ohne GUI

  Alt 5. Jun 2018, 23:47
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:
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;
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. Wie könnte man es besser machen?

lg,
jus
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Starten wahlweise mit und ohne GUI

  Alt 5. Jun 2018, 23:53
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:
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.
War es das was Du meintest?
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 6. Jun 2018 um 01:37 Uhr) Grund: Erklärung hinzugefügt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 06:32
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;
...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 09:35
@KodeZwerg
Ja stimmt, einfach in die dpr schreiben. Die Lösung lag eigentlich auf der Hand, aber im nachhinein ist man immer schlauer. Vielen Dank!

@jaenicke
Vielen Dank für den coolen Trick!

lg,
jus
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#5

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 09:46
Zumindest bisher ist es offenbar so, daß die IDE sämtlichen Code vor dem Application.Initialize 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:
Delphi-Quellcode:
begin
  if ParamCount > 0 then begin
    { Kommandozeile abarbeiten }
    Halt(0);
  end;

  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  ...
end.
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#6

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 10:19
Warum ermorden ( Halt(0); ) eigentlich immer welche ihre Anwendung, anstatt das zu machen, was sie eigentlich wollten?
Also die Anwendung Ausführung abzubrechen ( Exit; ).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 10:38
Den Code zum Auswerten/Abarbeiten der Parameter würde ich auslagern in eine andere Unit
Delphi-Quellcode:
unit CmdLineProcessor;

interface

function ProcessCmdLine() : Boolean;

implementation

function ProcessCmdLine() : Boolean;
begin
  // Hier eigentlich etwas sinnvolles mit den Parametern anfangen
  Result := ParamCount > 0;
end;
In der DPR genügt dann eine Zeile Code:
Delphi-Quellcode:
begin
  if ProcessCmdLine() then Exit;

  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  ...
end.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 11:16
Ja stimmt, einfach in die dpr schreiben. Die Lösung lag eigentlich auf der Hand, aber im nachhinein ist man immer schlauer.
Gern geschehen, auch wenn andere meinen Ansatz als falsch empfinden mögen, ein "Halt()" finde ich kann nie ein gutes Ende für ein Programm sein. Viel Erfolg mit welcher Methode auch immer!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 11:23
Spielt keine Rolle ob Halt oder Exit verwendrt wird. Tot ist tot. Mund Windows räumt automatisch nach Ende des Proceses auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Starten wahlweise mit und ohne GUI

  Alt 6. Jun 2018, 11:34
Ich gehe da mehr nach Anleitung,
Zitat:
Beschreibung
Bricht ein Programm ab.

Halt löst einen Programmabbruch aus und gibt die Steuerung an das Betriebssystem zurück.

Um ein Delphi-Programm normal zu beenden, rufen Sie die Methode Terminate in dem globalen Application-Objekt auf. Wenn in der Anwendung keine Unit verwendet wird, die ein Application-Objekt bereitstellt, rufen Sie die Prozedur Exit aus dem Hauptprogrammblock auf.

Exitcode ist ein optionaler Ausdruck, der einen Beendigungscode für das Programm festlegt.
und da steht es mit Exit bzw Terminate für TApplication.
Bei Halt() werden da nicht alle Close-Events übersprungen und es geht direkt zum Ende ohne Möglichkeit sein Programm aufzuräumen?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 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