AGB  ·  Datenschutz  ·  Impressum  







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

TForm sauber schleißen

Ein Thema von ATS3788 · begonnen am 4. Jan 2013 · letzter Beitrag vom 5. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

TForm sauber schleißen

  Alt 4. Jan 2013, 17:26
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:
if FormIndex = nil then begin
FormIndex := TFormIndex.Create(self);
FormIndex.Show;
FormIndex.hMainWin := self.Handle;
FormIndex.Visible := true;
Bei ShowModal kein Problem.
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:
procedure TFormIndex.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if self <> nil then
FreeAndNil(self);
............
Wenn ich das bei Destroy mache, geht gar nicht, bei FormClose
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.
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TForm sauber schleißen

  Alt 4. Jan 2013, 17:32
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TForm sauber schleißen

  Alt 4. Jan 2013, 17:39
Wozu es gut sein soll weiß ich zwar nicht, aber so geht es:
Delphi-Quellcode:
type
  TFormIndex = class( TForm )
  ...
  public
    destructor Destroy; override;
  end;

...

destructor TFormIndex.Destroy;
begin
  if FormIndex = Self then
    FormIndex := nil;
  inherited;
end;
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: TForm sauber schleißen

  Alt 4. Jan 2013, 18:03
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.
Application = Doof. Und Screen auch.

Bei Delphi sieht man das eben nicht so eng, es ist ja schließlich auch keine richtige OOP-Programmiersprache.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TForm sauber schleißen

  Alt 4. Jan 2013, 18:56
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.
Application = Doof. Und Screen auch.
Die Implementierung ist tatsächlich doof und könnte auch besser gemacht werden (siehe Printer ).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#6

AW: TForm sauber schleißen

  Alt 5. Jan 2013, 08:41
Danke
für die Antworten.
Sir Rufo es geht nur ums
verstehen und Deine Methode ist
echt interessant.

Martin Michael
Martin MIchael
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: TForm sauber schleißen

  Alt 5. Jan 2013, 11:09
Die Implementierung ist tatsächlich doof und könnte auch besser gemacht werden (siehe Printer ).
Dann hätten wir doofe Singletons. Und globale Variablen sind ja nichts anderes als Singletons ohne Schutzmechanismen. Ach egal.
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#8

AW: TForm sauber schleißen

  Alt 5. Jan 2013, 12:36
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
Martin MIchael
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: TForm sauber schleißen

  Alt 5. Jan 2013, 12:40
Eine schöne und einfache Lösung. Zeig doch mal den Code, dann haben alle etwas davon.
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#10

AW: TForm sauber schleißen

  Alt 5. Jan 2013, 17:01
Wenn Du eine Form modal aufrufst ist dieser Konstrukt das Mittel der Wahl:

Code:
With TMyForm.Create ( Application oder NIL, etc ) do
Try
  ...
  ShowModal;
  ...
Finally
  Free;
End;
Wenn Du eine Form nicht modal aufrufst ( z.B. mit Show )
dann schreibe in die Formclose der jeweiligen Form:

Code:
procedure TMyForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;
und schließe alle offenen Forms bei Programmende oder wenn gewünscht.
  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 03:37 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