Delphi メインフォーム非表示のアプリで、サブフォームを表示させると、タスクバーに表示されてしまう

 Delphi でメインフォーム非表示のアプリで、別のフォームを表示させると、タスクバーに表示されてしまう

プロジェクト側をこんな感じにして起動すると、メインフォーム(Form1)は非表示で、タスクバーにも表示されない
  Application.MainFormOnTaskbar := False;
  Application.ShowMainForm := False;

  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
ところが、Form2 を表示させた途端、タスクバーに表示された上、タスクバー上で右クリック「ウィンドウを閉じる」でアプリケーションが終了されてしまう
そのため Form2 を表示しても、タスクバーに表示させたくない

Form2 の Createイベントに、下記(SetWindowLong...)を加える
procedure TForm2.FormCreate(Sender: TObject);
begin
    SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;
また、メインフォーム(Form1)、サブフォーム(Form2)どちらを表示してもタスクバーに表示しないには
  Application.MainFormOnTaskbar := True;
  Application.ShowMainForm := True;

  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
procedure TForm1.FormCreate(Sender: TObject);
begin
    ShowWindow(Handle, SW_HIDE);
    SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW);
    ShowWindow(Handle, SW_SHOW);
end;

コメント