サブフォームをタスクバーに登録する
89 SubFormOnTaskbar 動作確認 Delphi2007 更新日 2008/06/23(月)

サブフォームを作成して開くと普通はタスクバーには登録されません。
ですので、コードを使ってタスクバーに登録してみましょう。

登録時にサブフォームの"親"を指定する時に
メインフォームを指定するのか、デスクトップウィンドウを指定するのかで
挙動が異なります。

テストプログラムを作ってみました。

Form1   通常のメインフォーム

Form2   通常のサブフォーム
    ・  タスクバーにはボタンがない
    ・  Form2を最小化するとデスクトップ左下にタイトルバー
        (MDIウィンドウのような挙動、あまり見かけない挙動)
    ・  Form1が最小化すればForm2も非表示になる

Form3   親にForm1を指定する
    ・  タスクバーにボタンがある
    ・  Form3を最小化するとタスクバーに格納される
    ・  Form1が最小化すればForm3も非表示になる
        タスクバーのForm3のボタンは消える

Form4   親にデスクトップウィンドウを指定する。
    ・  タスクバーにボタンがある。
    ・  Form4を最小化するとタスクバーに格納される
    ・  Form1が最小化してもForm4には影響なし

サブフォームの挙動として、よく見かけるのは
メールソフトの本体Windowとメール作成Windowですが
これは、Form1とForm4の動作になります。

これらのFormの作り方は次の通り
────────────────────
//Form2、Form3、Form4は自動生成フォームにしておくとする

//Unit1での記述

implementation

uses Unit2, Unit3, Unit4;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Form3.Show;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Form4.SHow;
end;

////////////////////////////////////////////////////////////
//Unit2での記述
//特になし

////////////////////////////////////////////////////////////
//Unit3での記述

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent := Form1.Handle;
end;

////////////////////////////////////////////////////////////
//Unit4での記述

implementation

{$R *.dfm}

{ TForm4 }

procedure TForm4.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent := GetDesktopWindow;
  // or
  //Params.WndParent := 0;
end;

────────────────────
上記のサンプルプログラムです
SubFormOnTaskbar.zip

※Delphi2007ではメインフォームとアプリケーションフォームの挙動が
  変更されていますがどちらでもサブフォームの挙動は変わりません。
  とりあえずここではDelphi2007での動作確認をしています。