Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi MDI Fenster schließt nicht richtig (https://www.delphipraxis.net/190595-mdi-fenster-schliesst-nicht-richtig.html)

Aviator 20. Okt 2016 11:01

AW: MDI Fenster schließt nicht richtig
 
Zitat:

Zitat von Jasocul (Beitrag 1351465)
Aber ich bin kein großer Freund der with-Anweisung. Ich nehme auch immer lokale Instanz-Variablen. Man muss sich nur klar machen, dass die Instanz auch ohne die Variable existiert. Ein weiteres Create mit der selben Variablen, lässt diese nur auf die neue Instanz zeigen. Die vorherige Instanz ist trotzdem vorhanden.

Ich auch nicht mehr. Hauptsächlich aus Gründen des Debuggings. :-D

Und wenn man sich die Instanz nicht irgendwo speichert, dann hat man u.U. ein schönes Speicherleck. :)
Habe allerdings keine Ahnung, wie das MDI technisch vom System verwaltet wird. Aber bei anderen Objekte wäre das der Fall.

himitsu 20. Okt 2016 11:23

AW: MDI Fenster schließt nicht richtig
 
MDI kümmert sich nur um die visuelle Darstellung (Parent usw.)
die Freigabe wird wie bei jeder anderen TForm behandelt, bzw. wie bei TComponent allgemein.

Zitat:

Zitat von Jasocul (Beitrag 1351465)
Beim erfolgreichem Form1.Close mit Action = caFree, wird das Form1.Free nur nicht sofort ausgeführt (wie Uwe Raabe bereits angedeutet hat). Die Queue braucht da halt ein bisschen Zeit.

Delphi-Quellcode:
MyForm.Close;
Application.ProcessMessages
MyForm := TMyForm.Create(Self);
...
OK, das geht aber dann doch eher Free statt Close oder halt mit 2 Forms leben.
Delphi-Quellcode:
MyForm.Free;
Application.ProcessMessages
MyForm := TMyForm.Create(Self);
...
Free hat aber ein "Problem", denn z.B. ein eventuell vorhandenes Event an OnCloseQuery wird nicht ausgeführt. (Free ist sofortiges Schließen ohne Rückfrage, samt Freigabe)

Aber warum eine Instanz des selben Form freigeben und eine neue Instanz erstellen, anstatt die bestehende Instanz wiederzuverwenden?

Jasocul 20. Okt 2016 11:25

AW: MDI Fenster schließt nicht richtig
 
Zitat:

Zitat von Aviator (Beitrag 1351469)
Und wenn man sich die Instanz nicht irgendwo speichert, dann hat man u.U. ein schönes Speicherleck. :)

Ist in diesem Fall kein Problem, da beim Schließen der Form ja dafür gesorgt wird, dass der Speicher freigegeben wird.

Eppos 20. Okt 2016 11:30

AW: MDI Fenster schließt nicht richtig
 
Mit unsauber meine ich...
Wenn Programmierer X den Namen der Form ändern muss, weis er nicht, dass es hier im Code oder an andererer Stelle eine Sonderlocke gibt.
In meinen Augen sehr gefährlich.

Jasocul 20. Okt 2016 12:01

AW: MDI Fenster schließt nicht richtig
 
@Himitsu:
Das Free wird in diesem Fall im OnClose aufgerufen. Das CloseQuery muss dann schon abgearbeitet sein. Passt also in diesem Fall noch.

@Eppos:
Welche Sonderlocke ist denn gefährlicher:
- Ein Free in einem Close-Event, welches eigentlich sowieso automatisch durchgeführt wird?
- Oder das Setzen einer Caption, was ein rein optischer Effekt ist?

Eppos 2. Nov 2016 13:00

AW: MDI Fenster schließt nicht richtig
 
@Jasocul
Als Sonderlocke meine ich das setzen der Caption, weil wir darüber weitere Funktionalitäten abbilden wie z.B.
-Formsettings
-Usersettings
-Sprachdaten
etc...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.
Seite 2 von 2     12   

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