Autor Beitrag
seddto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Mo 22.03.04 20:07 
Mit

ausblenden Delphi-Quelltext
1:
  Close;					


Jedes belibige Fenster wird mit Close nur geschlossen. Ist das Fenster aber das Hauptfenster, dann wird die Anwendung beendet.

_________________
Gruß
Martin
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Mo 22.03.04 20:25 
MartinPb hat folgendes geschrieben:
Mit

ausblenden Delphi-Quelltext
1:
  Close;					


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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Mo 22.03.04 20:28 
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
seddto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: 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:


ausblenden 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:

ausblenden 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' {Form1};

{$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 user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: Di 23.03.04 14:02 
In der Procedure die über Application.CreateForm aufgerufen wird nämlich "procedure TForm1.FormCreate(Sender: TObject)"
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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



BeitragVerfasst: Di 23.03.04 14:45 
Und hier gibt es noch eine andere Lösung: DP-Lösung.
seddto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: Di 23.03.04 14:59 
Danke für die Antworten :) Werds gleich mal ausprobieren..