![]() |
TForm sauber schleißen
Frohes neues Jahr meine Delphi Buddies
Die ist ein Problem was mich schon einige Jahre verfolgt und ich habe nie eine saubere Lösung gefunden. Ein neues Form wird erstellt, OK
Delphi-Quellcode:
Bei ShowModal kein Problem.
if FormIndex = nil then begin
FormIndex := TFormIndex.Create(self); FormIndex.Show; FormIndex.hMainWin := self.Handle; FormIndex.Visible := true; Nur es soll kein Modales Fenster sein. Das Fenster soll bei "Close" den Speicher freigeben und den Zeiger auf Nil setzen. Ich möchte das Fenster von FormIndex schließen.
Delphi-Quellcode:
Wenn ich das bei Destroy mache, geht gar nicht, bei FormClose
procedure TFormIndex.FormClose(Sender: TObject; var Action: TCloseAction);
begin if self <> nil then FreeAndNil(self); ............ gibt es manchmal Schutzverletzungen. Bei CanClose habe ich es noch nicht ausprobiert. Meine Frage, wie ist es richtig zu bewerkstelligen und wo kann man nachlesen wie ein Fenster geschlossen wird. |
AW: TForm sauber schleißen
Wenn Du einen Owner angibst, sollte es eigentlich schon damit getan sein, im OnClose Action auf caFree zu setzen. IIRC benachrichtigen TComponents ihren Owner, wenn sie freigegeben werden. Sollte ich mich irren, kann man das aber auch nachbauen.
|
AW: TForm sauber schleißen
Wozu es gut sein soll weiß ich zwar nicht, aber so geht es:
Delphi-Quellcode:
BTW: Wir erinnern uns, globale Variablen sind doof und sollten idR vermieden werden, auch wenn Delphi das mit seinem RAD Ansatz vormacht und damit einen quasi Standard vorgaukeln möchte.
type
TFormIndex = class( TForm ) ... public destructor Destroy; override; end; ... destructor TFormIndex.Destroy; begin if FormIndex = Self then FormIndex := nil; inherited; end; |
AW: TForm sauber schleißen
Zitat:
Delphi-Quellcode:
= Doof. Und
Application
Delphi-Quellcode:
auch. :lol:
Screen
Bei Delphi sieht man das eben nicht so eng, es ist ja schließlich auch keine richtige OOP-Programmiersprache. |
AW: TForm sauber schleißen
Zitat:
Delphi-Quellcode:
).
Printer
|
AW: TForm sauber schleißen
Danke
für die Antworten. Sir Rufo es geht nur ums verstehen und Deine Methode ist echt interessant. Martin Michael |
AW: TForm sauber schleißen
Zitat:
|
AW: TForm sauber schleißen
Hallo
Sir Rufo wahrscheinlich habe ich nicht richtig erklärt was ich möchte. Ich habe Ein Main Form und von diesem steure ich 2 andere Sub Fenster. Habe dies nun damit gelöst indem ich vom Sub Index Fenster bei FormClose mit sendMessage dem Main Fenster mitteile bitte FreeAndNil und das funktioniert wunderbar. Danke für die Antworten Martin Michael |
AW: TForm sauber schleißen
Eine schöne und einfache Lösung. Zeig doch mal den Code, dann haben alle etwas davon.
|
AW: TForm sauber schleißen
Wenn Du eine Form modal aufrufst ist dieser Konstrukt das Mittel der Wahl:
Code:
Wenn Du eine Form nicht modal aufrufst ( z.B. mit Show )
With TMyForm.Create ( Application oder NIL, etc ) do
Try ... ShowModal; ... Finally Free; End; dann schreibe in die Formclose der jeweiligen Form:
Code:
und schließe alle offenen Forms bei Programmende oder wenn gewünscht.
procedure TMyForm.FormClose(Sender: TObject;
var Action: TCloseAction); begin Action := caFree; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz