Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programm schließen im FormCreate (https://www.delphipraxis.net/114873-programm-schliessen-im-formcreate.html)

JSB 2. Jun 2008 09:42


Programm schließen im FormCreate
 
Hallo,


ich habe die interessante Erfahrung machen müssen, dass ich beim OnCreate eines Formulars, das Formular nicht schließen kann. Der Code wird einfach ignoriert...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var cfg : TIniFile;
begin

    //Datenbank-Konfiguration laden
    if FileExists(pfad + 'admincfg.ini') then
    begin
      cfg := TIniFile.Create(pfad + 'admincfg.ini');
      AdminDB.Database := cfg.ReadString('DATABASE','PATH','ERROR');
      AdminDB.Username := cfg.ReadString('DATABASE','USER','ERROR');
      AdminDB.Password := cfg.ReadString('DATABASE','PASSWORD','ERROR');
    end
    else
    begin
      MessageDlg('Fehler! Konfigurationsdatei "admingui.ini" nicht gefunden!', mtError, [mbOK], 0);
      Close; //macht der net
    end;

end;
was kann man da machen, bzw. warum funktioniert es eigentlich nicht?

Luckie 2. Jun 2008 09:44

Re: Programm schließen im FormCreate
 
Überleg mal, was du da versuchst zu tun. Du versuchst in das Auto einzusteigen und gleichzeitig wieder auszusteigen. Warum macvhst du die Überprüfung nicht bevor du das Formular überhaupt erzeugst in der Projektdatei?

Alien426 2. Jun 2008 09:47

Re: Programm schließen im FormCreate
 
Du hast das Objekt "Form" noch nicht erzeugt (Form.Create) und willst doch schon eine seiner Routinen (Form.Close) ausführen.

JSB 2. Jun 2008 09:49

Re: Programm schließen im FormCreate
 
danke für den Vorschlag!

Naja... ich dachte es wäre mehr sowas wie
  • OnCreate(Autotür aufschließen)
  • merken das man den Führerschein zuhause gelassen hat
  • die tür also zumachen und nicht einsteigen...
  • ;-)

hitzi 2. Jun 2008 09:52

Re: Programm schließen im FormCreate
 
Wenn du im OnCreate merkst, dass das Programm geschlossen werden muss, dann starte dort doch einen kurzen Timer der dann nichts weiter macht, als das Programm zu schließen.

michaelg 2. Jun 2008 09:58

Re: Programm schließen im FormCreate
 
Functionieren würde
Delphi-Quellcode:
Application.Terminate;
auch schon im FormCreate.

Ob das guter Stil ist und das Deinen moralischen Ansprüchen genügt, mußt Du selbst wissen. :wink:

Luckie 2. Jun 2008 10:00

Re: Programm schließen im FormCreate
 
Zitat:

Zitat von hitzi
Wenn du im OnCreate merkst, dass das Programm geschlossen werden muss, dann starte dort doch einen kurzen Timer der dann nichts weiter macht, als das Programm zu schließen.

Warum diese Krücken? Was ist dagegen einzuwenden vorher zu prüfen, ob man das Programm starten und das Formular anzeigen lassen will oder eben nicht?

hitzi 2. Jun 2008 10:11

Re: Programm schließen im FormCreate
 
Zitat:

Zitat von Luckie
Warum diese Krücken? Was ist dagegen einzuwenden vorher zu prüfen, ob man das Programm starten und das Formular anzeigen lassen will oder eben nicht?

Weil ich zum Beispiel die verwendeten Prüffunktionen nur in der entsprechenden Klasse haben möchte, da sie nur dort gebraucht werden und dann müsste man auch noch im Projektquelltext die Prüfungen einbauen. Würde beides nicht weh tun, aber ich finde es in vielen Fällen so sinnvoller. Um den Timer zu sparen, könnte man auch eine Variable nutzen und die Form später im OnShow schließen. Wenn man allerdings die Form überhaupt nicht braucht (Logging oder ähnliches) und die Form auch nicht aufpoppen soll, dann muss man Luckies Weg nutzen.

Luckie 2. Jun 2008 10:30

Re: Programm schließen im FormCreate
 
Zitat:

Zitat von michaelg
Functionieren würde
Delphi-Quellcode:
Application.Terminate;
auch schon im FormCreate.

Die Vorschläge werden ja immer schlimmer.

Bernhard Geyer 2. Jun 2008 10:41

Re: Programm schließen im FormCreate
 
Wir machen es immer so:

Delphi-Quellcode:
PostMessage(self.Handle, WM_CLOSE, 0, 0);

Reinhardtinho 2. Jun 2008 10:42

Re: Programm schließen im FormCreate
 
Hi,

Wenn keine vorherige Prüfung stattfinden soll, wie Luckie das vorgeschlagen hat, würde ich mit PostMessage arbeiten.


MFG
Lorenz


[Edit]Bernhard Geyer war schneller ... :stupid: ... kein roter Kasten im Firefox?[/Edit]

hitzi 2. Jun 2008 10:43

Re: Programm schließen im FormCreate
 
Zitat:

Zitat von Luckie
Die Vorschläge werden ja immer schlimmer.

Hehe ... warum dass denn schon wieder? Ich würde es ja verstehen, wenn du bei der Verwendung von "Halt" rummeckerst, aber so?!

mleyen 2. Jun 2008 11:06

Re: Programm schließen im FormCreate
 
Warum nicht folgendes:

Delphi-Quellcode:
initialization

Application.ShowMainForm := IfIniExitsShowTheForm;
?
Oder direkt im Projektcode das nötige FileExist einbauen

Edit: Arg ich häng grad voll daneben sry^^, das würde ja nur ein hide zur Folge haben...

Hier:

Delphi-Quellcode:
...
uses
  SysUtils,
...

if FileExists(pfad + 'admincfg.ini') then
Application.CreateForm(TForm1, Form1);
...

JSB 2. Jun 2008 11:39

Re: Programm schließen im FormCreate
 
ich habs erstmal im Projektquelltext gemacht...
Nachteil ist das ich (eigentlich) unnötigerweise die Units IniFiles, SysUtils und Dialogs hinzufügen musste

Die weiteren Vorschläge werde ich testen um eine Optimale Lösung für mich finden.
Danke an alle. :thumb:

Luckie 2. Jun 2008 11:46

Re: Programm schließen im FormCreate
 
Zitat:

Zitat von JSB
ich habs erstmal im Projektquelltext gemacht...
Nachteil ist das ich (eigentlich) unnötigerweise die Units IniFiles, SysUtils und Dialogs hinzufügen musste

Wieso? Es reicht doch zu prüfen, ob sie da ist. Auslesen kannst du sie doch in Konstruktor des Formulares.

JSB 2. Jun 2008 11:52

Re: Programm schließen im FormCreate
 
ja...
schon...

hab's aber dann an 2 verschiedenen Stellen...

Fussball-Robby 2. Jun 2008 11:55

Re: Programm schließen im FormCreate
 
Zitat:

Zitat von spawn89
Delphi-Quellcode:
...
uses
  SysUtils,
...

if FileExists(pfad + 'admincfg.ini') then
Application.CreateForm(TForm1, Form1);
...

Das ist doch nur eine Zeile. Und den Rest lässt du einfach so im OnCreate, ohne das FileExists natürlich :wink:

JSB 2. Jun 2008 12:41

Re: Programm schließen im FormCreate
 
und die Fehlermeldung ?

Delphi-Quellcode:
uses
  ... SysUtils, Dialogs,

...


else
    Messagedlg('Fehler! Konfigurationsdatei "admincfg.ini" nicht gefunden!', mtError, [mbOK], 0);
wenn ich nur den Pfad prüfe und die Ini im Show/Create auslese spar ich mir nur die IniFiles im Projekt.

...ist aber weiterhin nicht schlimm.
Beide Lösungen sind ok


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