Hallo,
ich habe eine einfache Lösung für mein Problem gefunden.
Man muß dem Objekt nur bekannt machen welche Variable es referenziert.
Diese kann man dann in onClose auf nil setzen.
Man muß nur darauf achten, das man sich keine Kopie der Instanzvariablen, sondern die Adresse selber merkt. (Pointer auf Form2 vom Typ ^TForm2)
Diesem Pointer weist man dann die Adresse zu := @Form2.
Das war's. Relativ einfach, oder?
ps: Vielen Dank an
NicoDE, es war eigentlich seine Idee
Unit1 mit dem MainForm:
Delphi-Quellcode:
...
procedure TForm1.Button1Click(Sender: TObject);
begin
if not assigned(Form2) then
begin
Form2 := TForm2.Create(self);
Form2.MyInstance := @Form2;
end;
form2.show;
end;
...
Und hier ist die Unit2 mit dem SubForm:
Delphi-Quellcode:
...
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 =
class(TForm)
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
MyInstance: ^TForm2;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
MyInstance^ :=
nil;
end;
end.
...