Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm selbst beenden (https://www.delphipraxis.net/13517-programm-selbst-beenden.html)

hacki 20. Dez 2003 11:30


Programm selbst beenden
 
Hallo,

aufgrund von Exceptions oder sonstigen Fehlern im Programm möchte ich aus dem Programm heraus selbiges selbst beenden. Ich habe es schon versucht mit

Code:
MainForm.Close;
oder auch mit
Code:
Application.Terminate;
und auch mit beidem.

Sie führen zwar dazu, das das Programm beendet wird, doch führen Sie zunächst noch die übergeordneten Routinen aus in denen Sie aufgerufen wurden.

und auch ein

Code:
exit
sprengt nur die aktuelle routine, nicht die übergeordnete !

=> Dies führt aber unweigerlich zu weiteren Exeptions und möglicherweise zu Datenbank-Inkonistenzen. Daß die From-Close Routine ausgeführt wird ist gewollt und gut aber dann soll das Programm auch beendet sein !!!

Wie kann ich das verbessern ? Ich bin echt ratlos.... :gruebel: :gruebel:

Hoffe ihr könnt mir helfen und "laßt mich nicht dumm sterben" :?

grüsse
hacki

Niels 20. Dez 2003 11:45

Re: Programm selbst beenden
 
Moin!

Exit kann man zwar benutzen, aber man sollte versuchen ohne auszukommen.

Ansonsten musst du dein Programm einfach so aufgebaut werden, dass die anderen Prozeduren gestoppt werden. Eine Möglichkeit wäre mit einer globalen Variable (boolean) zu speichern ob das Programm weiterlaufen soll oder abgebrochen wird. Dann kannste in den übergeordneten Prozeduren nach Aufruf der Unterprozedur, die MainForm.Close oder so enthält überprüfen ob weitere Befehle ausgeführt werden sollen oder nicht und je nach dem dann entscheiden was passiert.

Ich hoffe ich hab etwas verständlich geschrieben :mrgreen:

MfG Niels

hacki 20. Dez 2003 13:00

Re: Programm selbst beenden
 
Hi Niels,

danke erstmal für deine Hinweise

Zitat:

Exit kann man zwar benutzen, aber man sollte versuchen ohne auszukommen.
Ich habe das EXIT nur verwendet, da CLOSE und TERMINATE nicht direkt das Prog beenden, sondern die Routine weiter ausführen.

Mit einer logischen Variable zu arbeiten finde ich in einem großen Prog nicht praktikabel, da Du jede Anweisung dann in Abhängigkeit von dieser Variblen ausführbar machen muß, sprich

unendlich viele IF - Konstrukte bilden mußt !!!

TERMINATE und CLOSE beenden das Programm ja, allerdings nicht sofort !!! Ich möchte aber nicht, das weitere Operationen ausgeführt werden :wall:

Ich hoffe, da gibt's noch ein paar Tricks :idea:

grüsse
hacki

DevStar 20. Dez 2003 13:20

Re: Programm selbst beenden
 
Zitat:

Zitat von hacki
TERMINATE und CLOSE beenden das Programm ja, allerdings nicht sofort !!! Ich möchte aber nicht, das weitere Operationen ausgeführt werden :wall:

Halt()

MfG
DevStar

BungeeBug 20. Dez 2003 13:55

Re: Programm selbst beenden
 
Hi,

ne totsichere Methode ist :

Delphi-Quellcode:
SendMessage(handle,WM_Close,0,0);

phlux 20. Dez 2003 13:59

Re: Programm selbst beenden
 
Joah aba soweit ich weiß werden die Nachrichten doch erst nacheinander abgearbeitet, wenn er jetzt ne Fkt hat die das ganze Prog auslastet könnte das doch taaauuuusend Jahre (in etwas übertriebener Darstellung ;) ) dauern bis das Prog sich schließt.

BungeeBug 20. Dez 2003 14:34

Re: Programm selbst beenden
 
Hi,

jup richtig nur tuen eure Vorschläge alle nix anderes ... meine ist der direkte Weg über die API eure machen noch nen kleinen Umweg über die Borland VCL. Dauern kann alles ... dazu brauche man die ProcessMessages.

Luckie 20. Dez 2003 14:37

Re: Programm selbst beenden
 
Zitat:

Zitat von hacki
Hallo,

aufgrund von Exceptions oder sonstigen Fehlern im Programm möchte ich aus dem Programm heraus selbiges selbst beenden. Ich habe es schon versucht mit

[..]

sprengt nur die aktuelle routine, nicht die übergeordnete !

=> Dies führt aber unweigerlich zu weiteren Exeptions und möglicherweise zu Datenbank-Inkonistenzen. Daß die From-Close Routine ausgeführt wird ist gewollt und gut aber dann soll das Programm auch beendet sein !!!

wie wäre es die Fehler im Programm zu beheben, anstatt an den Symptomen rumzudocktern? Ergo, kuck was im OnClose, OnDestroy deines Fensters passiert und finde den Fehler.

phlux 20. Dez 2003 14:39

Re: Programm selbst beenden
 
Zitat:

Zitat von BungeeBug
jup richtig nur tuen eure Vorschläge alle nix anderes ...

Zum Glück hatte ich keine Vorschlag unterbreitet ;) Ich bin aber auch Luckies Meinung.

hacki 20. Dez 2003 15:37

Re: Programm selbst beenden
 
hi Lucki,

ich bin zwar grundlegend deiner meinung, dennoch können operationen wie beispielsweise der batchmove aus irgendwelchen gründen auf dem zielrechner fehlschlagen - diese ursachen kann man nur bedingt abfangen und bearbeiten.

da das prog nur weiter gestartet werden kann, wenn die datenumsetzung hingehauen hat und ich zudem noch mehrere tabellen geöffnet halte schreibe ich ein wiederaufsetz und fehlerprotokoll und beende das programm => Das Fortfahren mit dem Programm führt unweigerlich zu Folgefehler, da z.b. auf Felder zugrgriffen wird die vor der umsetzung nicht vorhanden waren !!! => Ein Analysieren und späteres Neu starten des Progs ist am sichersten.


Kennt jemand die genauen Exceptions beim Batchmove oder wißt ihr wo ich Dokumentationen finden kann ??

greetings hacki


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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 by Thomas Breitkreuz