Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Formular mit ESC schliessen (https://www.delphipraxis.net/193793-formular-mit-esc-schliessen.html)

HPB 9. Sep 2017 17:04

Formular mit ESC schliessen
 
Guten Tag Delphianer,
ich erzeuge im OnCreate-Ereignis eines Formulars verschiedene Objekte.
Delphi-Quellcode:
  Adresse := TOAdressen.Create;
  KrankenBesuch := TOKrankenBesuche.create;
  DoppelMitglied := TOLODoppelMitglied.create;
  BrAnekdoten := TOAnekdoten.Create;
  SchluesselVerw := TOLogeSchluesselVerwaltung.create;
  BrSonstVerein := TOBrSonstigeVereine.Create;
Diese gebe ich im OnDestroy-Ereignis des Formulars wieder frei.
Delphi-Quellcode:
  Adresse.Free;
  BrAnekdoten.Free;
  KrankenBesuch.Free;
  DoppelMitglied.Free;
  SchluesselVerw.Free;
  BrSonstVerein.Free;
Ich möchte nun mit der Taste-ESC das Formular schliessen:
Wenn ich im FormKeyDown-Ereignis den Code
Delphi-Quellcode:
 if Key = VK_ESCAPE then
 Close;
hinzufüge wird das Formular auch geschlossen und die Anwendung kehrt zum
Hauptfenster zurück.
Werden damit aber auch die Objekte freigegeben?
Welches ist die beste Vorgehensweise für so etwas?
Vielen Dank für Eure Hilfe im Voraus.

Aviator 9. Sep 2017 17:24

AW: Formular mit ESC schliessen
 
Das sollte der Fall sein. Setz doch einfach mal einen Breakpoint in beide Events und schau, ob der Debugger anhält. Aber warum sollte er das nicht?

Uwe Raabe 9. Sep 2017 17:30

AW: Formular mit ESC schliessen
 
Zitat:

Zitat von Aviator (Beitrag 1380694)
Das sollte der Fall sein.

Das ist nur dann der Fall, wenn die TCloseAction im OnClose-Event des Forms auf caFree gesetzt wird. Ohne dies gilt die Aussage nur für das MainForm, das beim Close die ganze Applikation beendet. Andernfalls erfolgt nur ein Hide.

Aviator 9. Sep 2017 18:15

AW: Formular mit ESC schliessen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1380695)
Zitat:

Zitat von Aviator (Beitrag 1380694)
Das sollte der Fall sein.

Das ist nur dann der Fall, wenn die TCloseAction im OnClose-Event des Forms auf caFree gesetzt wird. Ohne dies gilt die Aussage nur für das MainForm, das beim Close die ganze Applikation beendet. Andernfalls erfolgt nur ein Hide.

Da hast du Recht. Gut. Ich habe das "eines Formulares" etwas anders gedeutet. Aber nichts desto trotz sollten es zumindest keine Memory Leaks geben, da die Form ja dann auch nur nochmal angezeigt und nicht ein weiteres Mal erstellt wird und somit das OnCreate und das OnDestroy Event nur jeweils einmal ausgelöst wird.

Redeemer 9. Sep 2017 21:26

AW: Formular mit ESC schliessen
 
Dafür gibt's TCustomForm.Release.

himitsu 9. Sep 2017 22:32

AW: Formular mit ESC schliessen
 
Release verhindert aber auch ein OnCloseQuery.

OnCloseQuery gibt es nur beim Close
und Release ist einfach nur ein verzögertes Free.

Redeemer 9. Sep 2017 23:03

AW: Formular mit ESC schliessen
 
Ja, ich hatte gedacht, gelesen zu haben, er überschreibt Destroy, aber er setzt OnDestroy.

Ich würde Destroy überschreiben und Release benutzen.

Oder man nimmt halt ein modales Fenster. Das kann man auch schließen, indem man beim Abbrechen-Button Cancel := True sitzt.

HPB 10. Sep 2017 08:58

AW: Formular mit ESC schliessen
 
Um das Thema abzuschließen.
Ich habe in allen Formularen im OnClose-Event
Delphi-Quellcode:
Action := caFree;
gesetzt. Wenn ich die Aussage von Uwe Rabe richtig verstehe,
wird dann auch das OnDestroy-Event ausgeführt.
Vielen Dank an alle für die Hilfe.

Aviator 10. Sep 2017 10:20

AW: Formular mit ESC schliessen
 
Du solltest wirklich mal einen Breakpoint in das/die Event(s) setzen und dann einfach mal das Programm mit dem Debugger starten. Dann hast du auch Gewissheit, dass das was du erreichen willst auch funktioniert. Zusätzlich solltest du evtl.
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := True;
in deine DPR einfügen um zu sehen, ob du nicht noch andere Memory Leaks hast.

himitsu 10. Sep 2017 13:29

AW: Formular mit ESC schliessen
 
OnDestroy wird ausgeführt, wenn die Form freigegeben wird.

Und caFree sagt, dass beim Schließen (Close) die Form freigegeben werden soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 1 von 2  1 2      

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