AGB  ·  Datenschutz  ·  Impressum  







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

Formular mit ESC schliessen

Ein Thema von HPB · begonnen am 9. Sep 2017 · letzter Beitrag vom 10. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

Formular mit ESC schliessen

  Alt 9. Sep 2017, 17:04
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.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Formular mit ESC schliessen

  Alt 9. Sep 2017, 17:24
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#3

AW: Formular mit ESC schliessen

  Alt 9. Sep 2017, 17:30
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Formular mit ESC schliessen

  Alt 9. Sep 2017, 18:15
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.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Formular mit ESC schliessen

  Alt 9. Sep 2017, 21:26
Dafür gibt's TCustomForm.Release.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Formular mit ESC schliessen

  Alt 9. Sep 2017, 22:32
Release verhindert aber auch ein OnCloseQuery.

OnCloseQuery gibt es nur beim Close
und Release ist einfach nur ein verzögertes Free.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Formular mit ESC schliessen

  Alt 9. Sep 2017, 23:03
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#8

AW: Formular mit ESC schliessen

  Alt 10. Sep 2017, 08:58
Um das Thema abzuschließen.
Ich habe in allen Formularen im OnClose-Event
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.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Formular mit ESC schliessen

  Alt 10. Sep 2017, 10:20
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. ReportMemoryLeaksOnShutdown := True; in deine DPR einfügen um zu sehen, ob du nicht noch andere Memory Leaks hast.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Formular mit ESC schliessen

  Alt 10. Sep 2017, 13:29
OnDestroy wird ausgeführt, wenn die Form freigegeben wird.

Und caFree sagt, dass beim Schließen (Close) die Form freigegeben werden soll.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:21 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