5

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

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

4

7 に答える 7

7

すぐに答えを教えてくれた 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;
于 2008-11-04T13:56:58.427 に答える
6

この正確な問題に関する興味深い議論がここにあります(VB6 の観点から)。

あなたの質問の観点から最も関連性の高いビットは次のとおりです。

「ウィンドウを作成すると、タスクバーはウィンドウの拡張スタイルを調べて、WS_EX_APPWINDOW (&H40000) または WS_EX_TOOLWINDOW (&H80) スタイルがオンになっているかどうかを確認します。WS_EX_APPWINDOW がオンになっている場合、タスクバーにはウィンドウのボタンが表示されます。 WS_EX_TOOLWINDOW がオンになっている場合、タスクバーにはウィンドウのボタンが表示されません.ウィンドウは、これらの拡張スタイルの両方を持つべきではありません.ウィンドウにこれらのスタイルのいずれかがない場合、タスクバーは、ウィンドウがは所有されておらず、ウィンドウが所有されている場合はボタンを作成しません。」

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

于 2008-11-04T11:55:51.637 に答える
1

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に移動します。メインのフォームユニットとform1の「OnShow」イベントは次のように実行します。

procedure TForm1.FormShow(Sender: TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

これは役に立ちます、私は同じ問題を抱えていました、ネット全体を検索しましたが、解決しませんでした

于 2011-02-15T10:46:13.050 に答える
1

http://www.scalabium.com/faq/dct0096.htmに感謝します。

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
  ShowWindow(Application.Handle, SW_SHOW);
end;

テストしたところ、Delphi2006 で動作しました。また、ウィンドウ メニューと最小/最大ボタンは引き続き表示されます。

于 2008-11-04T11:50:12.927 に答える
0

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

于 2009-04-14T12:19:41.007 に答える
0

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

' タスクバーに統合できないツールバーを作成する予定です。

助けてくれてありがとう

于 2015-05-29T08:13:43.320 に答える
-1

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

ShowWindow(_window, SWHide);

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

ShowWindow(_window, SWShow);
于 2009-03-05T18:10:43.620 に答える