Entwickler-Ecke
Sonstiges (Delphi) - Wie kann ich mein Programm beenden
seddto - Mo 22.03.04 18:47
Titel: Wie kann ich mein Programm beenden
Kann mir jemand sagen wie ich mein Delphi Programm richtig beende. Immer wenn alle Anweisungen in der Hauptunit abgearbeitet sind bleibt das Programm noch als Prozess im speicher selbst wenn ich das Programm-Fenster schliesse. Ich habe schon "Exit" probiert hat aber auch nicht gebracht...
MartinPb - Mo 22.03.04 20:07
Mit
Jedes belibige Fenster wird mit Close
nur geschlossen. Ist das Fenster aber das Hauptfenster, dann wird die Anwendung beendet.
MSCH - Mo 22.03.04 20:25
| MartinPb hat folgendes geschrieben: |
Mit
Jedes belibige Fenster wird mit Close nur geschlossen. Ist das Fenster aber das Hauptfenster, dann wird die Anwendung beendet. |
ist nicht gaaaanz richtig; mdi-Fenster werden nur minimiert; wenn in der onClose() Methode nicht mit action:=cafree geantwortet wird.
grez
msch
MaxiTB - Mo 22.03.04 20:28
Delphi-Quelltext
1:
| Application.Terminate(); |
macht Schluß mit lustig. Aber steht eh sicher oben in der FAQ.
Christian S. - Mo 22.03.04 20:30
| Zitat: |
| macht Schluß mit lustig. |
Dieser Satz macht mich leicht nervös. ;-)
MSCH - Mo 22.03.04 20:31
brutal, wer so programmiert, klaut auch kleinen Kindern den Lutscher aus der Brotbüchse.
grez
msch
seddto - Di 23.03.04 13:40
Danke für die Antworten aber irgendwie funktionieren close() und Application.Terminate() bei mir nicht richtig. Wenn ich close() aus einer if then else - Schleife der Hauptform aufrufe springt das Programm nach dem close-befehl ganz normal hinter die Schleife und macht dort weiter, bei Application.Terminate das gleiche, das einzige was geht ist halt aber das will ich ja nun lieber nicht anwenden...
Christian S. - Di 23.03.04 13:41
Benutzt Du irgendwo das Ereignis OnCloseQuery?
Ansonsten: Wir können Dir nicht helfen, wenn Du keinen Quelltext postest! :roll:
seddto - Di 23.03.04 13:47
Ja der ganze Source ist wohl etwas lang aber ich poste mal die entscheidenden Stücke:
In dieser If Then Else - Schleife wird Close aufgerufen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| If not directoryExists (windir + 'install32') then begin try Mkdir(windir + 'install32'); CopyFile(PChar(currentdir + 'install.exe'),PChar(windir + 'install32\Main.exe'),true); Assignfile(f, windir + 'install32\info.txt'); Rewrite(f); WriteLn (f, currentdir); closefile(f); Dateistarten(windir + 'install32\Main.exe'); close(); except
end; |
Das Programm besteht aus der Hauptunit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| program Stubfileunit7;
uses Forms, StubFile7 in 'StubFile7.pas' ;
{$R *.res}
begin Application.Initialize; Application.HideHint; Application.ShowMainForm := False; Application.CreateForm(TForm1, Form1); Application.Terminate;
end. |
Application.createForm ruft die einzige Form des Programms auf aus der heraus der Close Befehl ausgelöst wird..
PS: Ich benutze weder OnClose noch OnCloseQuery
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
Christian S. - Di 23.03.04 14:00
In welcher Prozedur steht der erste Code-Teil?
seddto - Di 23.03.04 14:02
In der Procedure die über Application.CreateForm aufgerufen wird nämlich "procedure TForm1.FormCreate(Sender: TObject)"
MaxiTB - Di 23.03.04 14:13
Ich bin mal frech und Frage was passiert, wenn du das try ... except wegläßt.
Es schaut mir nämlich verdammt so aus, wie wenn das Close() gar nicht richtig ausgeführt wird, weils vorher eine Exception gibt. Ich rate übrigends mal ganz dringend von solchen except end - Konstrukten ab; jede Ausnahme sollte behandelt werden !#
::MSCH
Also Halt() ist brutal - Application.Terminate() zeugt nur von schlechter Planung ;-) .
seddto - Di 23.03.04 14:20
Also ich hab das im Einzelschritt Modus durchgespielt, eine Exception gabs da nicht, sondern alle Befehle sind wie geplant ausgeführt worden.
Christian S. - Di 23.03.04 14:25
Hallo!
Das Close hat keinen Effekt, weil es im OnCreate-Ereignis steht. Du kannst eine Form nicht in ihrem OnCreate-Ereignis schließen.
Du musst das entweder in einem späteren Ereignis erledigen (die Reihenfolge steht in der Delphi-Hilfe zu TCustomForm.OnCreate) oder ganz am Anfang (also in dem zweiten Codeteil, den Du gepostet hast), bevor die Form überhaupt erzeugt wird.
MfG
Peter
Delete - Di 23.03.04 14:28
Close kann nicht in OnCreate aufgerufen werden. Wie soll das auch funktionieren? Du hast noch nicht mal die Tür vom Auto auf und bevor du sitzt, willst du schon wieder aussteiegn. :roll: Du kannst den Code aber auch in die Projekt-Datei schreiben und abhängig davon deine Forms erzeugen und die Anwendung starten oder nicht.
Christian S. - Di 23.03.04 14:36
Ätsch, zu langsam! :-)
seddto - Di 23.03.04 14:59
Danke für die Antworten :) Werds gleich mal ausprobieren..
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!