Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie beendet man eine eigene Anwendung richtig? (https://www.delphipraxis.net/92753-wie-beendet-man-eine-eigene-anwendung-richtig.html)

smart 25. Mai 2007 11:28


Wie beendet man eine eigene Anwendung richtig?
 
Hallo Alle!

Wie beendet man eine eigene Anwendung richtig, vorallen wenn man mehrer Fenster offen hat? Mit Close wird ja nur das aktuelle Fenster geschlossen.

Gruß
Heike

BenjaminH 25. Mai 2007 11:32

Re: Wie beendet man eine eigene Anwendung richtig?
 
Hallo,
Wenn du die MainForm schließt, müsste auch die Anwendung beendet werden.

Luckie 25. Mai 2007 11:33

Re: Wie beendet man eine eigene Anwendung richtig?
 
Wenn du das Hauptformluar mit Close schliesst, werden auch alle anderen Fenster der Anwendung geschlossen.

smart 25. Mai 2007 11:40

Re: Wie beendet man eine eigene Anwendung richtig?
 
Zitat:

Zitat von Luckie
Wenn du das Hauptformluar mit Close schliesst, werden auch alle anderen Fenster der Anwendung geschlossen.

Ich erzeuge die Fenster zur Laufzeit (außer das Hauptfenster). Wenn ich das Hauptfenster mit close schließe, bleiben die zur Laufzeit erzeugten Fenster auf.

Gruß
Heike

mkinzler 25. Mai 2007 11:46

Re: Wie beendet man eine eigene Anwendung richtig?
 
Was hast du beim Erzeugen als Owner übergeben?

mschaefer 25. Mai 2007 11:51

Re: Wie beendet man eine eigene Anwendung richtig?
 
Moin, moin,

dann schließe die Normalfenster und gib sie frei (destroy) im OnClose-Ereignis des Hauptformulars.
MKinzler hat übrigens noch die zweite Variante im Auge (Hirn) :

- Den Owner bei Erzeugen auf Application setzen, dann werden
* diese auch mit dem Mainform geschlossen.

Grüße // Martin

Schubi 25. Mai 2007 12:02

Re: Wie beendet man eine eigene Anwendung richtig?
 
Wie wärs einfach mit Application.Terminate ?

mkinzler 25. Mai 2007 12:03

Re: Wie beendet man eine eigene Anwendung richtig?
 
Zitat:

Zitat von Schubi
Wie wärs einfach mit Application.Terminate ?

Unsauber.

richard_boderich 25. Mai 2007 12:21

Re: Wie beendet man eine eigene Anwendung richtig?
 
@ mkinzler

Warum ist das unsauber? Kannst du das bitte naeher erläutern? Ich dachte HALT sei die unsaubere Lösung und verwende eigentlich
oft Application.terminate.

Gruß Richard

inherited 25. Mai 2007 12:25

Re: Wie beendet man eine eigene Anwendung richtig?
 
Close der Mainform macht auch nichts anderes nachher, als Application.Terminate aufzurufen.
Delphi-Hilfe schreibt folgendes:
Zitat:

Zitat von Delphi-Hilfe
Rufen Sie Terminate auf, um die Anwendung programmgesteuert zu beenden. Durch einen Aufruf der Methode Terminate wird das Anwendungsobjekt nicht einfach gelöscht, die Anwendung kann vielmehr ordnungsgemäß heruntergefahren werden.

Die Methode Terminate ruft die Windows-API-Funktion PostQuitMessage auf, sodass die Anwendung ordnungsgemäß heruntergefahren wird. Sie brauchen Terminate nicht direkt aufzurufen.

Diese Methode wird automatisch für eine WM_QUIT-Botschaft und beim Schließen des Hauptformulars aufgerufen.


mkinzler 25. Mai 2007 12:26

Re: Wie beendet man eine eigene Anwendung richtig?
 
Wenn Formulare zur laufzeit ohne Parent erstellt werden, werden diese nicht richtig Freigegeben. Zugegeben ist besser als HALT.

SirThornberry 25. Mai 2007 12:29

Re: Wie beendet man eine eigene Anwendung richtig?
 
richtig unsauber ist keine Variante wenn man weiß was dabei geschieht und es bewusst einsetzt um die vorzuge zu nutzen.

Zur eigentlichen Frage:
Ein Programm winn linear abgearbeitet und wenn ganz am Ende angekommen wird ist das Programm zu Ende. Am besten sieht man das bei alten Konsolenanwendungen oder Batchdateien. Wenn diese die letzte Zeile abgearbeitet haben ist das Programm zu Ende.
Genau so verhält es sich auch bei deinem Programm. Um Klicks etc. zu verarbeiten haben Windowsanwendungen eine Nachrichtenschleife welche eben so lange immer wieder durchläuft bis die Quit-Message kommt. Nach der Nachrichtenschleife ist dann in der Regel das Programmende.
Mit Funktionen wie Application.Terminate kannst du diese Schleife auch beenden.
Und mit Halt wird zum Programmende gesprungen und man hat noch die Möglichkeite einen Errorcode zurück zu geben (den der Aufrufer deines Programmes dann auswerten kann).

@mkinzler: Die Begründung warum Halt schlechter sein soll würde mich interessieren (in einem seperatem Thread). Wie bereits erwähnt hat auch Halt seine Daseinsberechtigung.

halinchen 25. Mai 2007 12:43

Re: Wie beendet man eine eigene Anwendung richtig?
 
Zitat:

Zitat von mschaefer
dann schließe die Normalfenster und gib sie frei (destroy) im OnClose-Ereignis des Hauptformulars.

Eher Release aufrufen. Sonst kommen manchmal AVs, weil die Botschaftsbehandlungsroutine nicht richtig abgearbeitet.

SirThornberry 25. Mai 2007 16:00

Re: Wie beendet man eine eigene Anwendung richtig?
 
Release an der Stelle könnte nutzlos sein denn Release postet eine Message. Wenn aber dann keine Nachrichten mehr verarbeitet werden (wozu auch, es muss ja nicht mehr auf klicks etc. reagiert werden sondern nur noch aufgeräumt werden) wird auch nichts frei gegeben.

Matze 25. Mai 2007 16:10

Re: Wie beendet man eine eigene Anwendung richtig?
 
Wäre da nicht FreeAndNil am besten? Daran hätte ich pauschal gedacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz