Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MDI - Variable TForm wieder freigeben (https://www.delphipraxis.net/63832-mdi-variable-tform-wieder-freigeben.html)

davar 23. Feb 2006 14:26


MDI - Variable TForm wieder freigeben
 
Hallo Leute,

habe hier eine Frage, die bestimmt einfach zu beantworten ist - nur find ich da keine Antwort.

In einer MDI-Applikation wird ein MDI-Child geöffnet, dabei wird ihr der Name z.B. "Form5" zugewiesen, so dass andere Fenster darauf zugreifen können.

In das "OnClose"-Ereignis setze ich den Code
Delphi-Quellcode:
Action:= caFree;
ein, damit das Formular auch geschlossen und nicht minimiert wird.

Wie gesagt, andere Formulare können auf dieses Formular zugreifen. Und damit dabei keine Probleme entstehen wird vorher abgefragt:

Delphi-Quellcode:
if Assigned(Form5) then
.....
Wenn nun Form5 erstellt und wieder geschlossen wurde, verschwindet die Variable "Form5" jedoch nicht mehr und daher kommt ständig eine Fehlermeldung.

Wird die Variable "Form5" dann nicht freigegeben? Oder wie mach ich das?

MfG

davar

marabu 23. Feb 2006 15:04

Re: MDI - Variable TForm wieder freigeben
 
Hallo davar,

wenn zu jeder Zeit höchstens eine Instanz von TForm5 existiert, dann kannst du die von Delphi - im Wesentlichen für eigene Zwecke - bereit gestellte globale Variable Form5 ruhig verwenden. Durch die CloseAction caFree wird zwar der durch die Instanz belegte Speicher wieder freigegeben, der Zeiger Form5 bleibt aber als dangling pointer erhalten. Damit deine Prüfung mit Assigned(Form5) wirksam ist, musst du im Ereignis OnClose() nicht nur die CloseAction auf caFree setzen, sondern auch den Zeiger Form5 auf nil.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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