サブフォームをタスクバーに登録する
|
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での動作確認をしています。
|