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/)
-   -   VCL-Anwendung starten und Funktion ausführen (https://www.delphipraxis.net/192035-vcl-anwendung-starten-und-funktion-ausfuehren.html)

bra 15. Mär 2017 13:01

VCL-Anwendung starten und Funktion ausführen
 
Irgendwie stehe ich gerade auf dem Schlauch. :?
Ich habe eine Anwendung, die Dateien verarbeitet. Die soll einfach nur ein Fenster (VCL) anzeigen und direkt nach dem Start loslaufen und Meldungen im Fenster ausgeben, ohne dass man noch irgendwas anklicken soll.
Bekommt man das irgendwie hin, ohne die Ausführung in einem Thread laufen zu lassen?

BerndS 15. Mär 2017 13:12

AW: VCL-Anwendung starten und Funktion ausführen
 
Hallo,
ich mache das so:

Delphi-Quellcode:
...
Application.CreateForm(TMyForm, MyForm);
Application.OnIdle := MyForm.FirstAction;
Application.Run;
und dann

Delphi-Quellcode:
procedure TMyForm.FirstAction;
begin
  Application.OnIdle := nil;
  ...
end;

tomkupitz 15. Mär 2017 13:13

AW: VCL-Anwendung starten und Funktion ausführen
 
Nimm einen Timer. Nicht schön, geht aber.

Warum keinen Thread?

Sherlock 15. Mär 2017 13:14

AW: VCL-Anwendung starten und Funktion ausführen
 
OnFormShow?

Sherlock

nahpets 15. Mär 2017 13:29

AW: VCL-Anwendung starten und Funktion ausführen
 
Im FormCreate einfach die Funktion aufrufen, die automatisch gestartet werden soll?

Ein VCL-Programm von mir, das wahlweise als 'normale' Anwendung oder als Batchprogramm laufen soll, macht das so:
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TfmDPMain, fmDPMain);
  Application.CreateForm(TfmUrlListe, fmUrlListe);
  Application.CreateForm(TfmAbout, fmAbout);
  Application.CreateForm(TdmSynHighlighter, dmSynHighlighter);
  Application.CreateForm(TfmKonfigurationAuswaehlen, fmKonfigurationAuswaehlen);
  if fmAbout.bMD5Checked then begin
    fmDPMain.acl.CreateMenu;
    if ParamCount = 1 then begin
      Try
        fmDPMain.Show;
        fmDPMain.edBatchVerarbeitungIniFile.Text := ParamStr(1);
        fmDPMain.acIniDateiLadenExecute(Nil);
        fmDPMain.pc.ActivePageIndex   := 2;
        fmDPMain.acBatchAusfuehren.Tag := 1;
        fmDPMain.acBatchAusfuehrenExecute(Nil);
        fmDPMain.acSchliessenExecute(nil);
      except
        on e : Exception do begin
          ShowMessage(e.Message);
        end;
      end;
      fmUrlListe.tbUrlListe.SavePersistent;
      fmUrlListe.tbUrlListe.Close;
    end else begin
      Application.Run;
    end;
  end;
end.
Oder kurz und knapp:
Statt
Delphi-Quellcode:
Application.Run;
Delphi-Quellcode:
Form1.Show;
DieAuszufuehrendeRoutine;
Form1.Close;

bra 15. Mär 2017 14:05

AW: VCL-Anwendung starten und Funktion ausführen
 
Super, ich danke euch. Mir hat einfach das Form.Show gefehlt. So funktioniert es :-D

Kein Thread deswegen, weil das nur ein einfacher Job ist, der einmal verwendet wird und ich es nicht zu kompliziert machen wollte ;)

hoika 16. Mär 2017 06:48

AW: VCL-Anwendung starten und Funktion ausführen
 
Hallo,
ich würde statt OnShow OnActivate benutzen.
OnShow kann mehrfach aufgerufen werden.

PS:
OK, OnActivate auch, aber hier hilft als 1. Zeile OnActivate := nil;

Sherlock 16. Mär 2017 09:18

AW: VCL-Anwendung starten und Funktion ausführen
 
Oder man spendiert sich ein
Delphi-Quellcode:
fRunOnce:Boolean
.

Sherlock


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