Как свернуть окно на панель задач?(то есть не иконизировать) - PullRequest
7 голосов
/ 03 июня 2011

У меня есть окно, которое я хочу свернуть (на панель задач), поэтому я звоню ShowWindow:

ShowWindow(Handle, SW_MINIMIZE);

За исключением того, что вместо минимизации себя (до панели задач), окно iconified :

enter image description here

Окно не создано:

enter image description here

Как свернуть окно на панель задач?


Обновление:

Следуя советам 2002 года , я пытаюсь установить стиль окна WS_EX_APPWINDOW и / или убедиться, что у окна нет владельца:

enter image description here

К сожалению, это меняет поведение моего (Delphi) приложения, потому что теперь для моего приложения теперь есть две иконки панели задач, а не одна:

enter image description here

Это, конечно, артефакт Дельфи (5); и потому что я пытался решить другую проблему .

Но это не должно повлиять на этот вопрос. я вызываю ShowWindow(..., SW_MINIMIZE) API, и вместо того, чтобы свернуть окно, Windows обозначает приложение.

Как свернуть окно на панель задач?

1 Ответ

10 голосов
/ 03 июня 2011

Этот значок на панели задач является значком приложения (дескриптора), а не значка главной формы.

Использование:

Application.Minimize;

Редактировать: Но из обеих ваших ссылок, я понимаю, вы уже знали это ... дух;)

Это работает для 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 при сворачивании или восстановлении.

(протестировано с D5 и D7 на XP и W7)

...