Hallo,
ich muß das Thema noch mal aufnehmen, da ich noch keine befriedigende Antwort / Lösung gefunden habe.
Folgendes Problem:
Ich habe ein von TForm abgeleitetes Objekt.
Dieses Objekt wird erzeugt und dargestellt.
Der Benutzer kann das Objekt schliessen und es soll dann auch Freigegeben werden.
Es gibt eine Funktion um das Form anzuzeigen und falls nicht vorhanden neu zu erzeugen.
Beispielcode:
Delphi-Quellcode:
// Unit1.pas
...
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(Form2) then
begin
Form2 := TForm2.Create(self);
Memo1.Lines.Add(DateTimeToStr(now)+' Create');
end
else Memo1.Lines.Add(DateTimeToStr(now)+' schon da');
Form2.Caption := 'Test';
Form2.Show;
end;
...
// unit2.pas
...
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
...
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// hier werden noch viele weitere Dinge freigegeben
Action := caFree;
end;
...
Mein Problem ist nun folgendes:
- Wie kann ich das Formular auf nil setzen, damit Assignes klappt?
- oder wie kann ich zuverlässig erkennen, ob das Form existiert? (Das Form kann auch unsichtbar sein)
Innerhalb der Form kann (darf) ich ja folgende Dinge nicht machen:
Delphi-Quellcode:
...
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(Self);
// oder
Free;
Self := nil;
end;
...
Hat jemand eine Idee?
Folgende Beiträge habe ich auch schon gelesen, aber keine akzeptable Antwort erhalten:
http://www.delphipraxis.net/internal...ct.php?t=17825
http://www.delphipraxis.net/internal...ct.php?t=15099
Danke für Eure Hilfe