В нашем примере для решения задачи мы передаем конструктору переменную формы. Затем, при закрытии формы, мы сбрасываем эту переменную.
Естественно, эта технология подразумевает написание некоторого кода, поэтому, если вы не расположены к этому действию, пропустите мое дальнейшее повествование.
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.
- Jeff Fisher [001053]