![]() |
Delphi-Version: 10 Berlin
Überprüfung bei Programmstart
Ich möchte das bei Doppelklick auf die .exe meines Programms geprüft wird ob sich die Ini-Datei im Programmverzeichnis befindet.
Das Programm startet sich ja generell ohne diese Ini gar nicht. Wenn die Ini nicht gefunden wurde, soll sich das Einstellungsfenster als erstes öffnen, hier soll der Nutzer die Daten für die Ini selbst eingeben. Ich habe die ganze Prozedur als erste auszuführende Instanz in das "OnCreate" gepackt. Alles was passiert ist das eine Exception bei Start angezeigt wird, danach geht gar nichts mehr. Hat jemand eine Idee wie ich das am besten realisieren kann? |
AW: Überprüfung bei Programmstart
Wenn Du im OnCreate des Hauptformulars auf ein anderes Formular zugreifst, muss es zwangsläufig knallen, da dieses ja noch gar nicht erzeugt wurde. Es gibt mehrere Möglichkeiten:
- eine temporäre Instanz des Einstellungsfensters per Code erstellen und darauf zugreifen - Code aus dem OnCreate entfernen und z.B. ins OnActivate verschieben - selbstdefinierte Nachricht ans eigene Fenster schicken (per PostMessage) und später darauf reagieren - etc. pp. |
AW: Überprüfung bei Programmstart
Delphi-Quellcode:
if fileexists(FileName) then
ShowMessage(FileName + ' exists OK') else ShowMessage(FileName + ' does not exist'); Zitat:
|
AW: Überprüfung bei Programmstart
Hallo,
- Welche Exception wird denn geworfen? - Eine Ini-Datei im Programmverzeichnis ist keine gute Idee, Otto-Normal-User hat auf den Programme-Ordner keine Schreibrechte. |
AW: Überprüfung bei Programmstart
Zitat:
Ich rufe das hier im OnCreate auf:
Delphi-Quellcode:
Mir ist klar das es so noch nicht gehen kann, aber auch noch nicht so ganz wie ich das lösen soll.
var
lEinstellungen: TTFormEinstellungen; begin if not(FileExists(ParamStr(0) + 'Test.INI')) then begin //Einstellungen-Fenster öffnen, Daten selbst eintragen, Übernehmen -> Programm starten ShowMessage('Ini-Datei nicht gefunden. Daten im nächsten Schritt selbst eintragen.'); lEinstellungen.BringToFront; end; end; |
AW: Überprüfung bei Programmstart
Immer wieder schöne Lösung wie ich finde:
- du prüfst, ob die Ini-Datei existiert bereits in der DPR-Datei bevor die Formulare erzeugt werden - im Hauptformular wartest du darauf, bis das Formular komplett sichtbar ist (das impliziert meiner Meinung nach "Ok, Formular(e) komplett geladen") - Dann wertest du deine Prüfung aus der DPR-Datei aus |
AW: Überprüfung bei Programmstart
Du hast lEinstellungen noch nicht intantiiert, versuchst aber dennoch, darauf zuzugreifen. Das kann nicht funktionieren.
|
AW: Überprüfung bei Programmstart
Zitat:
|
AW: Überprüfung bei Programmstart
mache so etwas so:
Delphi-Quellcode:
Und ja - das geht bestimmt besser und eleganter, aber ich programmiere immer noch in Delphi 6.0
Var:
ProgrammGestartet: Boolean; im OnCreate: ProgrammGestartet := False; im OnShow: if not ProgrammGestartet then begin PrüfeObIniDatei if NotIniDatei begin Abfragen end; end; Hans |
AW: Überprüfung bei Programmstart
Und guck dir mal an, was das ParamStr(0) + 'Test.INI' ergibt. Ich denke nicht, dass du das willst.
|
AW: Überprüfung bei Programmstart
Delphi-Quellcode:
Edit:
begin
if (not FileExists(ExtractFilePath(Application.ExeName) + 'Test.INI')) then begin //Einstellungen-Fenster öffnen, Daten selbst eintragen, Übernehmen -> Programm starten ShowMessage('Ini-Datei nicht gefunden. Daten im nächsten Schritt selbst eintragen.'); TFormEinstellungen.Create(Application).Show; end; end; und
Delphi-Quellcode:
ins OnClose von TFormEinstellungen.
Action := caFree;
|
AW: Überprüfung bei Programmstart
Zitat:
![]() |
AW: Überprüfung bei Programmstart
Zitat:
|
AW: Überprüfung bei Programmstart
Zeig mal, wie Du es machst.
Und die Krachermeldung. |
AW: Überprüfung bei Programmstart
1. Verlege die Prüfung aus dem Create in eine eigene Methode des Formulars (z. B. TForm1.CheckIni)
2. Füge vor der Zeile Application.Run die Prüfung in die dpr ein. Z. B.:
Delphi-Quellcode:
Ist der Rückgabewert von CheckIni <> true, wird das Programm nicht gestartet.
if Form1.CheckIni then Application.Run;
CheckIni könnte so in der Art aussehen:
Delphi-Quellcode:
function TForm1.CheckIni : Boolean;
begin if not FileExists(ChangeFileExt(Application.ExeName,'.ini')) then begin // Du musst hier dafür sorgen, dass das Einstellungsformular auch einen passenden Rückgabewert hat. // Buttons haben dafür z. B. die Eigenschaft ModalResult. Result := FormEinstellungen.ShowModal = mrOK; end; end; |
AW: Überprüfung bei Programmstart
Delphi-Quellcode:
Hier kracht er wieder bei mir.
Result := TFormSettings.ShowModal = mrOk;
Im dpr sieht das jetzt so aus:
Delphi-Quellcode:
begin
Application.Initialize; Application.MainFormOnTaskbar := True; Application.Title := 'Application'; Application.CreateForm(TApplication, Application); Application.Create; if Application.CheckIni then Application.Run; end. |
AW: Überprüfung bei Programmstart
Heißt Dein Hauptformular Application? Das ist sehr ungünstig.
|
AW: Überprüfung bei Programmstart
Außerdem würde ich das CheckIni nicht in TForm1 legen sondern diese Funktion direkt in die DPR-Datei schreiben und noch VOR Application.Initialize; aufrufen.
Delphi-Quellcode:
function CheckIni : Boolean;
begin Result := FileExists(ChangeFileExt(Application.ExeName,'.ini')); end; begin if not CheckIni then begin showmessage('Ini-Datei nicht vorhanden ...'); Halt(1); end; Application.Initialize; Application.MainFormOnTaskbar := True; Application.Title := 'Application'; Application.CreateForm(TApplication, Application); Application.Create; Application.Run; end. |
AW: Überprüfung bei Programmstart
Zitat:
|
AW: Überprüfung bei Programmstart
Was soll den die Zeile "Application.Create" bewirken?
|
AW: Überprüfung bei Programmstart
Mach es doch einfach so wie beschrieben.
- prüfe in der Ini-Datei FRÜH GENUG, ob die Ini-Datei vorhanden ist. -- wenn nicht, dann merke dir das in einer Variablen oder beende das Programm - wenn Ini nicht vorhanden und du es dir merkst, dann behandle diese Variable im WMFormVisible nachdem die Anwendung komplett geladen wurde (habe ich oben ja bereits geschrieben) |
AW: Überprüfung bei Programmstart
Schrieb irgend wer was von
Delphi-Quellcode:
Result := TFormSettings.ShowModal = mrOk;
Delphi-Quellcode:
Result := NameDesFormularsFuerDieEinstellungen.ShowModal = mrOk;
nicht:
Delphi-Quellcode:
Result := TypDesFormularsFuerDieEinstellungen.ShowModal = mrOk;
Heißt Dein Hauptformular tatsächlich Application und ist vom Typ TApplication? Ausgehend von Deinem Quelltext der DPR wird das Einstellungsformular dort nicht erstellt, also kannst Du auch nicht darauf zugreifen. Da das Programm vom Typ TApplication ist, kannst Du kaum ein Formular vom Typ TApplication produzieren, ohne dadurch massiv Probleme zu bekommen. Poste doch bitte den realen Quelltext der DPR und kein Beispiel, wie es aussehen könnte. Und wenn Du eindeutige Namen abänderst vor dem Posten, dann ersetze sie bitte durch sinnvolle Namen und nicht durch solche, die zu Konflikten führen müssen. So könnte die dpr aussehen:
Delphi-Quellcode:
Und im Hauptformular:
begin
Application.Initialize; Application.MainFormOnTaskbar := True; Application.Title := 'Ein sinnvoller Titel für die Taskbar'; Application.CreateForm(TfmMain, fmMain); Application.CreateForm(TfmEinstellungen, fmEinstellungen); if fmMain.CheckIni then Application.Run; end;
Delphi-Quellcode:
@DeddyH
function TfmMain.CheckIni : Boolean;
begin if not FileExists(ChangeFileExt(Application.ExeName,'.ini')) then begin // Du musst hier dafür sorgen, dass das Einstellungsformular auch einen passenden Rückgabewert hat. // Buttons haben dafür z. B. die Eigenschaft ModalResult. Result := fmEinstellungen.ShowModal = mrOK; end; end; Zitat:
@a.def Wenn die INI fehlt soll aber der Einstellungsdialog erscheinen, um sie zu erstellen und das Programm dann mit sinnvollen Einstellungen laufen. Wird es an der von Dir benannten Stelle beendet, bekommt man die Einstellungen nicht zustande und das Programm wird nie laufen ;-) |
AW: Überprüfung bei Programmstart
Funktioniert jetzt.
Poste später nochmal wie ich es gemacht habe. Sorry für die Verwirrung mit den Namen ;) Danke! |
AW: Überprüfung bei Programmstart
Zitat:
|
AW: Überprüfung bei Programmstart
Hallöle...:P
Delphi-Quellcode:
müßte es nicht FormSettings.ShowModal heißen?
TFormSettings.ShowModal
Wenn es so wäre dann empfehle ich dir den OOP Crashkurs... ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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