AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OnCloseQuery

Ein Thema von Willie1 · begonnen am 17. Mär 2020 · letzter Beitrag vom 28. Mär 2020
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#1

AW: OnCloseQuery

  Alt 26. Mär 2020, 21:07
Und wenn die Form durch ein Free geschlossen wird, dann wird OnClose/OnCloseQuery nichtmal aufgerufen.

Statt einer MessageBox kann es besser sein hier einen Dialog auf Basis von TForm zu benutzen, denn sobald Application den Befehl für das Beenden bekommt, werden alle modalen Fenster geschlossen und dein Programm kann ohne Warten runterfahren.



Auch kann es nicht schaden auf die Message für das Beenden von Windows zu reagieren und benentsprechend zu steuern ob der Fragedialog überhaupt aufgehn soll.



Und nein, on OnClose/OnCloseQuery gibt man nichts frei, außer es wurde im OnShow erstellt,
wobei eben zu beachten ist, dass OnClose nicht immer aufgerufen wird, womit man in OnShow/OnClose niemals etwas erstellen/freigeben darf.
(außer man macht das Freigeben sowohl im OnClose als auch nochmal im OnDestroy, falls es noch nicht passiert war)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Alt 26. Mär 2020, 22:22     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: OnCloseQuery

  Alt 27. Mär 2020, 03:32
Hallo
korrekt,
FormCreate: Erzeugen von Objekten
FormDestroy: Freigeben von Objekten

Auch im Sinne des folgenden Codes:
Delphi-Quellcode:
Form2:=TForm2.Create(Self);
Form2.TuWas;
Form2.Free;
Heiko

Geändert von hoika (27. Mär 2020 um 05:40 Uhr)
  Mit Zitat antworten Zitat
Alt 27. Mär 2020, 06:30     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: OnCloseQuery

  Alt 27. Mär 2020, 06:57
Hallo,
in meinem Bsp wird OnClose nicht aufgerufen.

Create -> Free (Destroy) wird immer aufgerufen
Create -> Close wird nicht immer aufgerufen

Und um gleichen Code zu haben, sollte man das OnDestroy nehmen.
Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#6

AW: OnCloseQuery

  Alt 27. Mär 2020, 09:11
@Frühlingsrolle

Create wird beim Erstellen aufgerufen.

Close beim Schließen.

Beim Hauptformular führt das Schließen eines des Formulares auch zum Programmende.

Bei jedem weiteren Formular aber nicht.
Wenn ich dort also im Create was erstelle, das Formular öffne (show), irgendwas mache, es dann schließe, dort alles im Create erstellte im OnClose bzw. OnCloseQuery freigebe und es dann später mit einem Show wieder anzeige, kann das zu eher unschönen Effekten (Zugriffsverletzungen) führen.

Probier' das doch bitte einfach mal in einem Testprogramm mit mehreren Formularen aus. In allen Formularen, außer dem Hauptformular erstellst Du halt die Routinen für's Create und OnClose bzw. OnCloseQuery. Im Create erstellst Du Stringlisten oder sonstige Objekte, im OnClose bzw. OnCloseQuery gibst Du sie frei.

Ins Hauptformular machst Du mehrere Buttons, je Unterformular einen und dann zeigst Du beim Klick auf den Button mit Show jeweils das entsprechende Unterformular an. Wie oft funktioniert das ohne Fehlermeldung?

Wird beim Schließen des Hauptformulars OnCloseQuery der Unterformulare aufgerufen? Oder das OnClose der Unterformulare?
Angehängte Dateien
Dateityp: zip Close.zip (4,5 KB, 1x aufgerufen)

Geändert von Delphi.Narium (28. Mär 2020 um 09:09 Uhr) Grund: Im Anhang veränderte Sourcen eingefügt. Text, entsprechend des Hinweises von p80286 angepasst.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: OnCloseQuery

  Alt 27. Mär 2020, 10:41

Beim Hauptformular führt das Schließen eines Formulares auch zum Programmende.
Nur Beim Hauptformular führt das Schließen eines Formulares auch zum Programmende.

Ich hatte schon an meinen Kenntnissen gezweifelt. Im übrigen bin ich der Meinung Daten (z.B. Stringlisten) sind unabhängig von Formularen. Diese aufzuräumen muß irgendwo anders stattfinden. Vorzugsweise da wo sie verarbeitet werden.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#8

AW: OnCloseQuery

  Alt 27. Mär 2020, 12:17
Weil es "besser" ist alles auf der Ebene freizugeben, wo es erstellt wurde.
OnShow->OnHide/Close
OnCreate->OnDestroy
Constructor->Destructor

Und wie mehrmals erwähnt, wird OnClose nicht immer aufgerufen, weswegen es sich für Freigaben garnicht eignet. (außer es gibt nochmal eine Freigabe im OnDestroy)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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