В нашем примере для решения задачи мы передаем конструктору переменную формы. Затем, при закрытии формы, мы сбрасываем эту переменную. Естественно, эта технология подразумевает написание некоторого кода, поэтому, если вы не расположены к этому действию, пропустите мое дальнейшее повествование. TMyForm = class(TForm) ... private FormVar: ^TMyForm; public constructor Create(AOwner: TComponent; var AFormVar: TMyForm); destructor Destroy; override; end;
constructor TMyForm.Create(AOwner: TComponent; var AFormVar: TMyForm); begin FormVar := @AFormVar; inherited Create; ..... end;
destructor TMyForm.Destroy; begin FormVar^ := nil; inherited Destroy; end;
MyForm := TMyForm.Create(Self, MyForm); MyOtherForm := TMyForm.Create(Self, MyOtherForm); Этот код при разрушении окна автоматически сбрасывает все, что вы передаете в AFormVar, в nil. Как вы, наверное, заметили, частный член FormVar реально является указателем на указатель. Так, читая содержимое памяти, адрес которой содержится в FormVar, мы реально получаем переменную формы. Таким образом мы можем просто установить ее в nil. |