![]() |
Application beenden vor erstem Erzeugen von Form
Hallo zusammen,
ich verstehe nicht, wie Applicationen korrekt beendet werden.
Delphi-Quellcode:
Wenn ich feststelle, dass die Datei nicht vorhanden ist, soll CreateForm nicht aufgerufen und das Programm gleich beendet werden.
Application.Initialize;
{hier prüfe ich, ob einen Datei vorhanden ist] Application.CreateForm(TfrmMain, frmMain); Application.Run; Wenn ich bspw. in der Prüfung Application.Destroy einfüge und das Erstellen der Form von Application.Terminated abhängig mache, also bspw.
Delphi-Quellcode:
, dann wird das Programm mit Fehler und Fenster beendet ".... funktioniert nicht mehr. Windows kann online nach einer Lösung für das Problem suchen.
Application.Initialize;
Application.Destroy; if not Application.Terminated then begin Application.CreateForm(TfrmMain, frmMain); Application.Run; end; online nach einer Lösung suchen und das Programm schließen Programm schließen Programm debuggen" Wenn ich das Fenster schließe folgt der nächste Hinweis Exception EReadError in module rtl100.bpl at 00038183 Fehler beim Lesen von Statusbar.Panels: Systemfehler. Code 1400. Ungültiges FEnsterhandle." Wie muss ich denn im Falle, dass die entsprechende Datei nicht vorliegt, die Application beenden? Gruß Ralf |
AW: Application beenden vor erstem Erzeugen von Form
Delphi-Quellcode:
Halt(0);
|
AW: Application beenden vor erstem Erzeugen von Form
Danke. Aber dennoch die Frage, warum es mit Application.Destroy nicht funktioniert?
|
AW: Application beenden vor erstem Erzeugen von Form
Man ruft nicht direkt Destroy auf.
Delphi-Quellcode:
Und jetzt rate mal, was du da machst?
Application.Free;
if not Application.Terminated the Genau, du erzeugst eine Exception, da du versuchst ein Objekt (TApplication) zu nutzen, welches nicht mehr existiert und da du an dieser Stelle keine Exceptions mehr abfängst/verarbeitest, schmiert gleich die ganze Anwendung ordentlich ab. Von Halt würde ich abraten. Das ist so, als wenn du bei 200 km/h 'nen Anker aus'm Auto wirfst, anstatt mit angemessener Geschwindigkeit abzubremsen.
Delphi-Quellcode:
oder notfalls
Application.Initialize;
{hier prüfe ich, ob einen Datei vorhanden ist} if darf_starten then begin Application.CreateForm(TfrmMain, frmMain); Application.Run; end;
Delphi-Quellcode:
Du kannst aber auch mal
Application.Initialize;
{hier prüfe ich, ob einen Datei vorhanden ist} if not darf_starten then Application.Terminate; Application.CreateForm(TfrmMain, frmMain); Application.Run; ![]()
Delphi-Quellcode:
Application.Initialize;
{hier prüfe ich, ob einen Datei vorhanden ist} if not darf_starten then Exit; Application.CreateForm(TfrmMain, frmMain); Application.Run; |
AW: Application beenden vor erstem Erzeugen von Form
Gegen Halt habe ich nichts, an der richtigen Stelle. Ansonsten ist evtl. besser Application.Terminate besser.
|
AW: Application beenden vor erstem Erzeugen von Form
Application.Terminate und/bzw. Exit habe mir nichts gebracht.
Der Code nach Terminate wird dennoch ausgeführt und exit brachte Fehlermeldungen in irgendwelchen bpls. Ich hab's nun so gemacht, dass ich die Lösung angehe:
Code:
Dennoch bleibt mir das mit dem Terminate/Destroy unverständlich (gerade auch, weil ich das Gefühl habe, dass Application.Terminate nichts zur Folge hat, außer Fehlermeldungen).
if darf_starten then begin
Application.CreateForm(TfrmMain, frmMain); Application.Run; end; |
AW: Application beenden vor erstem Erzeugen von Form
Was macht
Delphi-Quellcode:
? Löst die Instanz und gibt den Speicher frei! Was passiert wenn du dann fragst
Application.Destroy
Delphi-Quellcode:
? Du greifst noch mal auf das
if not Application.Terminated
Delphi-Quellcode:
Objekt zu, das du gerade feigegeben hast. Klar das es da knallt.
Application
Vielleicht an einem Beispiel verdeutlicht:
Delphi-Quellcode:
Was stimmt hier nicht?
var
StringList: TStringList; begin StringList := TStringList.Create; StringList.Free; StringList.Add('Viel Spaß'); end; |
AW: Application beenden vor erstem Erzeugen von Form
Antwort: 'Viel Spaß' ist deplaziert. Rein emotionell. :stupid:
|
AW: Application beenden vor erstem Erzeugen von Form
Zitat:
|
AW: Application beenden vor erstem Erzeugen von Form
Du solltest nicht immer so negativ denken, vielleicht fehlt dir für den Einsatz einfach nur die Phantasie.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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