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

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

プロジェクト側をこんな感じにして起動すると、メインフォーム(Form1)は非表示で、タスクバーにも表示されない
  1. Application.MainFormOnTaskbar := False;  
  2. Application.ShowMainForm := False;  
  3.   
  4. Application.CreateForm(TForm1, Form1);  
  5. Application.CreateForm(TForm2, Form2);  
ところが、Form2 を表示させた途端、タスクバーに表示された上、タスクバー上で右クリック「ウィンドウを閉じる」でアプリケーションが終了されてしまう
そのため Form2 を表示しても、タスクバーに表示させたくない

Form2 の Createイベントに、下記(SetWindowLong...)を加える
  1. procedure TForm2.FormCreate(Sender: TObject);  
  2. begin  
  3.     SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);  
  4. end;  
また、メインフォーム(Form1)、サブフォーム(Form2)どちらを表示してもタスクバーに表示しないには
  1. Application.MainFormOnTaskbar := True;  
  2. Application.ShowMainForm := True;  
  3.   
  4. Application.CreateForm(TForm1, Form1);  
  5. Application.CreateForm(TForm2, Form2);  
  1. procedure TForm1.FormCreate(Sender: TObject);  
  2. begin  
  3.     ShowWindow(Handle, SW_HIDE);  
  4.     SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW);  
  5.     ShowWindow(Handle, SW_SHOW);  
  6. end;  
関連投稿

コメント