ExitProcess vom OnShow-Ereignis von MainForm in Delphi

8

Ich habe eine Anwendung, die beim Start einige Bedingungen überprüft und ein externes Programm im OnShow-Ereignis des Hauptformulars startet. Das Problem ist, dass, wenn beim Starten des externen Programms ein Fehler auftritt, die Anwendung sofort beendet werden soll. Aber es gibt ein Problem damit, dass EurekaLog meine Exceptions abfängt und irgendwie die Nachrichtenschleife dort unterbricht, indem es alle Aufrufe von Application.Teminate und andere normale Abschaltmethoden negiert.

Also hier ist meine Frage, wäre ExitProcess der beste Weg, um meine Anwendung sofort zu beenden, wenn diese Bedingung besteht?

    
yozey 26.05.2009, 19:30
quelle

5 Antworten

11

Zu der Zeit, in der OnShow ausgelöst wurde, sind Sie zu weit in das Programm hineingekommen, um zu entscheiden, dass Sie das Programm nicht wirklich ausführen wollen. Sie sollten diese Entscheidung früher treffen. OnShow ist nicht der richtige Ort, um zu entscheiden, dass das Formular nicht angezeigt werden soll.

Das sollten Sie überprüfen, bevor Sie das Hauptformular erstellen. Setzen Sie Ihre Schecks in die DPR-Datei, und wenn Sie feststellen, dass das Programm nicht ausgeführt werden soll, rufen Sie einfach exit .

%Vor%

Geben Sie Ihre eigene Implementierung von ApplicationShouldReallyStart ein. (Und es sollte eigentlich eine separate Funktion sein, nicht inline in der DPR-Datei. Die IDE wird verwirrt, wenn der begin - end -Block in der DPR-Datei zu komplex wird.)

Abgesehen davon, rufen Sie nicht ExitProcess auf. Rufen Sie stattdessen Halt auf. Halt ruft ExitProcess auf, ruft aber auch Abschnitte zum Finalisieren von Einheiten und andere Delphi-spezifische Aufgaben zum Herunterfahren von Prozessen auf.

    
Rob Kennedy 26.05.2009, 22:02
quelle
2

Arbeiten MIT das System, nicht GEGEN es! Du kannst nicht einfach in der Mitte der Dinge sterben. Wenn Sie sterben wollen, tun Sie es innerhalb der Regeln - WM_CLOSE oder vielleicht Ihre eigene Routine, die sagt, warum es stirbt und sendet dann eine WM_CLOSE.

    
Loren Pechtel 27.05.2009 01:30
quelle
1

Sie senden besser eine wmClose-Nachricht an das Fenster. Andernfalls haben Sie eine große Chance, in Schwierigkeiten zu geraten, weil andere Nachrichten an das Formular gesendet werden.

    
Toon Krijthe 26.05.2009 19:33
quelle
0

Ich habe eine kleine Anwendung geschrieben, um eine Theorie zu testen und hier ist, was ich vorschlagen würde.

Rufen Sie die CLOSE-Methode auf.

Die folgende Beispieleinheit schließt die Anwendung ohne Fehler in D2009.

%Vor%     
Ryan J. Mills 26.05.2009 21:19
quelle
0

Obwohl ich hier vollkommen mit Rob Kennedy übereinstimme, möchte ich darauf hinweisen, dass Sie EurekaLogs Routinen verwenden können, um Fehlerdialoge zu steuern. Zum Beispiel:

%Vor%

Auf diese Weise wird die Anwendung direkt nach dem Anzeigen des Fehlerdialogs geschlossen.

    
Alex 27.05.2009 05:30
quelle

Tags und Links