7

(タスクバーに) 最小化したいウィンドウがあるので、次のように呼び出しますShowWindow

ShowWindow(Handle, SW_MINIMIZE);

それ自体を(タスクバーに)最小化するのではなく、ウィンドウをアイコン化することを除いて:

ここに画像の説明を入力

ウィンドウは親化されていません:

ここに画像の説明を入力

ウィンドウをタスクバーに最小化するにはどうすればよいですか?


アップデート:

2002 年のアドバイスに従ってWS_EX_APPWINDOW、ウィンドウ スタイルを設定したり、ウィンドウに所有者がいないことを確認したりします。

ここに画像の説明を入力

残念ながら、アプリケーションのタスクバー アイコンが 1 つではなく2 つになったため、(Delphi) アプリケーションの動作が変わります。

ここに画像の説明を入力

もちろん、これは Delphi のアーティファクトです (5)。私は別の問題を解決しようとしていたからです。

しかし、それはこの質問には影響しません。私はShowWindow(..., SW_MINIMIZE)API を呼び出しており、ウィンドウを最小化するのではなく、Windows がアプリケーションをアイコン化しています。

ウィンドウをタスクバーに最小化するにはどうすればよいですか?

4

2 に答える 2

11

タスクバーのそのアイコンは、メインフォームのアイコンではなく、アプリケーション (ハンドル) のアイコンです。

使用する:

Application.Minimize;

編集:しかし、あなたの両方のリンクから、私はあなたがすでにそれを知っていたことを理解しています.duh ;)

これは MainForm で機能します。

TForm1 = class(TForm)
private
  procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
protected
  procedure CreateParams(var Params: TCreateParams); override;

...

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    ExStyle := ExStyle or WS_EX_APPWINDOW;
    WndParent := GetDesktopWindow;
  end;
end;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.CmdType = SC_MINIMIZE then
    ShowWindow(Handle, SW_MINIMIZE)
  else
    inherited;
end;

タスクバーから Application.Handle を非表示にする (MainForm のタスクバー アイコンのみを表示する):Visibleこのフォームのプロパティを に設定Trueし、プロジェクト ファイルでアプリケーションを非表示にします。

Application.Initialize;
Application.CreateForm(TForm1, Form1);
ShowWindow(Application.Handle, SW_HIDE);
Application.Run;

このフォームでは、ShowWindow(Handle, SW_MINIMIZE);うまくいくはずです。また、最小化または復元時に Windows のデフォルトのズーム機能も提供します。

(XP および W7 で D5 および D7 を使用してテスト済み)

于 2011-06-03T15:24:03.330 に答える