モードレスサブフォームの生成と破棄
88 ModelessSubForm 動作確認 Delphi2007 更新日 2008/06/23(月)

Form1からForm2を開くときにモードレスなサブフォームとして
ボタンクリック時に生成し閉じた時に破棄するコードです。

複数個のForm2を使う事もできますし、
単一のサブフォームを開く場合にも使うことができます。

────────────────────
//Unit1側

//ボタンを押すことでForm2を複数生成することができる
procedure TForm1.Button1Click(Sender: TObject);
begin
  TForm2.Create(Self).Show;
end;

//ボタンを押してもForm2が存在すれば生成しないので
//Form2が一つだけしか存在しないように開く事ができる
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Assigned(Form2) then Exit;

  Form2 := TForm2.Create(Self);
  Form2.Show;
end;

////////////////////////////////////////////////////////////
//Unit2側
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;

  if Assigned(Form2)
    and (Form2=Self) then Form2 := nil;
end;
────────────────────
TForm2のFormCloseイベントで
    Action := caFree;
とすることでFormが破棄されて
そのときにnilを代入しているので
破棄された事を感知することもできます。