WS_EX_TOOLWIN を使用せずにフォームのタスクバー ボタンを非表示にする

StackOverflow https://stackoverflow.com/questions/261601

  •  06-07-2019
  •  | 
  •  

質問

タスクバーから Windows フォームを非表示にする必要がありますが、使用できません WS_EX_TOOLWINDOW フォームのタイトル バーにシステム メニューと最小/最大ボタンが必要なためです。

実行時にフォームをツールウィンドウに切り替えると、フォームスキニングが詰まってしまいます。Web で検索すると、VB には ShowInTaskbar プロパティがあることがわかり、これで希望どおりのことができるかどうか、また Delphi 2006 で実装できるかどうか疑問に思っています。また、このプロジェクトはCOMサーバーであり、MainFormなどはありません。

役に立ちましたか?

解決

この正確な問題に関する興味深い議論がありますこちら(VB6パースペクティブから)。

質問の観点から最も関連する部分は次のとおりです:

  

"ウィンドウを作成すると、タスクバー   ウィンドウの拡張スタイルを調べます   WS_EX_APPWINDOW   (& H40000)またはWS_EX_TOOLWINDOW(& H80)   スタイルがオンになっています。 WS_EX_APPWINDOWの場合   オンにすると、タスクバーに   ウィンドウのボタン、およびWS_EX_   TOOLWINDOWがオンになっている、タスクバー   ウィンドウのボタンは表示されません。   ウィンドウに両方が含まれることはありません   これらの拡張スタイル。ウィンドウが   これらのスタイルのいずれもありません、   タスクバーはボタンを作成することを決定します   ウィンドウが所有されていない場合   ウィンドウが   所有。"

     

ちなみに、GetWindowを使用します   GW_OWNERフラグを使用したAPI関数   ウィンドウが所有されているかどうかを判断します。

他のヒント

すぐに答えてくれたStuに感謝します。私の場合、所有しているフォームのハンドルをCreateParamsに手動で追加する必要がありましたが、他の場合や通常の場合には必要ない場合があります。

procedure TfrmWord2Site.CreateParams(var Params:TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := <your owner form>.Handle;
  Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
end;

Delphi XE(2010)では、これは完全に機能します。 メインフォームを編集する必要があります

program prog;  

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

begin
Application.Initialize;

// this value is set to "true", but you shoud set it "false"
Application.MainFormOnTaskbar := false;

Application.CreateForm(TForm1, Form1);
Application.Run;
end.

(この「フォームビュー」ウィンドウでのメインフォーム検索用)

この後、unit1.pas、メインフォームユニット、および「OnShow」に移動します。 form1のイベントdo:

procedure TForm1.FormShow(Sender: TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

これは助けになります。同じ問題があり、ネット全体を検索しましたが、解決できません

この分野の問題は、BordersStyle bsDialog/bsToolWindow によって解決されました(ただし、最小/最大は必要ありませんでした...)。しかし、なぜこれらの属性を組み合わせる必要があるのか​​不思議です。「通常の」ユーザーは混乱しないでしょうか?

TextboxをWindowsタスクバーに統合するコードを探しています。

ツールバーを作成して、タスクバーに統合することはできません。

ご協力ありがとうございます pj

C#でこれを行う1つの方法は次のとおりです。

ShowWindow(_window, SWHide);

int style = GetWindowLong(_window, GWL_EXSTYLE);
style |= WS_EX_TOOLWINDOW;
SetWindowLong(_window, GWL_EXSTYLE, style);

ShowWindow(_window, SWShow);
scroll top