AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

Ein Thema von MyRealName · begonnen am 19. Jun 2019 · letzter Beitrag vom 19. Jun 2019
Antwort Antwort
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#1

Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 10:04
Hallo,

ich habe eine MainForm (MDIForm) welche im OnClose Action := caFree setzt. Jetzt habe ich allerdings festgestellt, dass von den Komponenten auf der Form kein Destroy aufgerufen wird. Beim weiteren Untersuchen stellte ich fest, dass auch das OnFormDestroy der Hauptform nicht ausgeführt wird.

Im TCustumForm.Close wird ein Terminate ausgeführt, wenn die Action auf <> caNone ist und es die Application.MainForm ist.


Hat einer eine Idee, warum das so ist ? Ich würde es gern haben, dass die Destroy events der Komponenten korrekt ausgeführt werden!

Vielen Dank schonmal
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 10:20
Application.MainForm wird durch das Application-Objekt freigegeben, nachdem die MainForm geschlossen wurde.
Deshalb gibt es eigentlich keinen Grund dieses Formular durch Action := caFree schon nach dem OnClose freizugeben.

Terminate in TCustumForm.Close ist wahrscheinlich eine Art Notbremse, um in diesem Fall Folgefehler abzufangen.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 10:35
Also was ich sehe ist dass in Application.Components normalerweise die MainForm drin steht, bei meiner Anwendung leider nicht. Und deswegen wird auch das free nicht aufgerufen.

Jetzt müßte ich nur noch den grund wissen.

Edit : Ein Application.InsertComponent(Self) auf der MainForm hat das Problem gelöst. Aber seltsam, daß das nicht autoamtisch passiert.

Geändert von MyRealName (19. Jun 2019 um 10:56 Uhr) Grund: Neue Informationen :)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 11:06
Also was ich sehe ist dass in Application.Components normalerweise die MainForm drin steht, bei meiner Anwendung leider nicht. Und deswegen wird auch das free nicht aufgerufen.

Jetzt müßte ich nur noch den grund wissen.

Edit : Ein Application.InsertComponent(Self) auf der MainForm hat das Problem gelöst. Aber seltsam, daß das nicht autoamtisch passiert.
Das passiert schon automatisch, wenn das Mainform in der autocreate liste ist und der Programmierer nicht im dpr-File herumgepfuscht und das Application.CreateForm-Statement für das Mainform demoliert hat. Man beachte auch: wenn mehrere Forms in der Autocreate-Liste stehen wird das erste, das mit Application.CreateForm erzeugt wird das Application.Mainform, dessen Schließen die Anwendung beendet. Wenn Du da also mehr als ein Form in der autocreate-Liste hast, prüf mal die Reihenfolge, in der sie erzeugt werden. Eventuell ist dein "mainform" gar nicht das Application.Mainform...
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 12:06
Es wird nur ein Form automatisch erzeugt, das dpr sieht so aus :

Code:
  Application.Initialize;
  Application.CreateForm(TfMainForm, fMainForm);
  Application.Run;
Und wie gesagt, nachdem ich es manuell in die Application.Components eingefügt habe, ging alles wie es sollte..
Seltsam.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 12:22
Es wird nur ein Form automatisch erzeugt, das dpr sieht so aus :

Code:
  Application.Initialize;
  Application.CreateForm(TfMainForm, fMainForm);
  Application.Run;
Und wie gesagt, nachdem ich es manuell in die Application.Components eingefügt habe, ging alles wie es sollte..
Seltsam.
Das sollte definitiv nicht nötig sein, da muß irgend was faul sein. Läßt sich aber leider so remote nicht weiter analysieren.
Peter Below
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 13:05
Kann es sein, dass du irgendwo den Konstruktor von TfMainForm überschrieben hast und dort fehlt jetzt z.b. der inherited Aufruf?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 13:22
Eventuell auch mal so versuchen:
Delphi-Quellcode:
  Application.Initialize;
  Application.MainFormOnTaskBar := True;
  Application.CreateForm(TFMainForm, FMainForm);
  Application.Run;
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Delphi MainForm ruft beim Schliessen kein OnFormDestroy auf

  Alt 19. Jun 2019, 15:07
Kann es sein, dass du irgendwo den Konstruktor von TfMainForm überschrieben hast und dort fehlt jetzt z.b. der inherited Aufruf?
inherited wird da aufgerufen.

Danke an alle, ich lasse das jetyt erstmal so mit dem manuell einsetzen und schau dann mal wenn Zeit ist.
  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 21:53 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