| Autor |
Beitrag |
seddto
      
Beiträge: 56
|
Verfasst: Mo 22.03.04 18:47
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...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 22.03.04 18:51
Hallo!
Dazu steht etwas in den FAQs.
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: Mo 22.03.04 20:07
Mit
Delphi-Quelltext
Jedes belibige Fenster wird mit Close nur geschlossen. Ist das Fenster aber das Hauptfenster, dann wird die Anwendung beendet.
_________________ Gruß
Martin
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mo 22.03.04 20:25
| MartinPb hat folgendes geschrieben: | Mit
Delphi-Quelltext
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
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
MaxiTB
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: Mo 22.03.04 20:28
Delphi-Quelltext 1:
| Application.Terminate(); |
macht Schluß mit lustig. Aber steht eh sicher oben in der FAQ.
_________________ Euer Mäxchen
Wer früher stirbt, ist länger tot.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 22.03.04 20:30
| Zitat: | | macht Schluß mit lustig. |
Dieser Satz macht mich leicht nervös. 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mo 22.03.04 20:31
brutal, wer so programmiert, klaut auch kleinen Kindern den Lutscher aus der Brotbüchse.
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
seddto 
      
Beiträge: 56
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 23.03.04 13:41
Benutzt Du irgendwo das Ereignis OnCloseQuery?
Ansonsten: Wir können Dir nicht helfen, wenn Du keinen Quelltext postest! 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
seddto 
      
Beiträge: 56
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 23.03.04 14:00
In welcher Prozedur steht der erste Code-Teil?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
seddto 
      
Beiträge: 56
|
Verfasst: Di 23.03.04 14:02
In der Procedure die über Application.CreateForm aufgerufen wird nämlich "procedure TForm1.FormCreate(Sender: TObject)"
|
|
MaxiTB
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: 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  .
_________________ Euer Mäxchen
Wer früher stirbt, ist länger tot.
|
|
seddto 
      
Beiträge: 56
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.  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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 23.03.04 14:36
Ätsch, zu langsam! 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.03.04 14:45
Und hier gibt es noch eine andere Lösung: DP-Lösung.
|
|
seddto 
      
Beiträge: 56
|
Verfasst: Di 23.03.04 14:59
Danke für die Antworten  Werds gleich mal ausprobieren..
|
|