Свернуть приложение (НЕ используя Traicon) - PullRequest
0 голосов
/ 19 мая 2018

Я много читал об этом, но чем больше я читаю, тем больше путаюсь.Я использую Delphi 2007 и хочу минимизировать приложение при запуске, меня не интересует значок на панели задач, просто нужен значок на панели задач, чтобы можно было восстановить приложение.

Если вы беретеСамый простой из всех проектов с основной формой и набором файлов .dpr:

Application.MainFormOnTaskBar := true;
Application.ShowMainForm := false;

и запуска приложения, значок TASKBAR отсутствует, поэтому нет способа восстановить и активировать приложение.

Как правильно свести к минимуму при запуске, не показывая основную форму, а затем сделать ее свернутой?Казалось бы, все так просто, но для меня это не так.

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Действительно, это просто и объяснено в документации, но найти его немного сложно, так как оно не связано с тем местом, где вы могли бы его ожидать / искать.

System.CmdShow

Указывает флаги для отображения главного окна приложения.

procedure TForm1.FormCreate(Sender: TObject);
begin
  CmdShow := SW_SHOWMINNOACTIVE;
  ...

Он не задокументирован, но поддерживаются только флаги SW_SHOWMINNOACTIVE и SW_SHOWMAXIMIZED, поэтому вы не можете использовать SW_SHOWMINIZED.

Также не забудьте удалить оператор ShowMainForm := false;, в противном случаеформа не будет видна и, следовательно, не будет никакого значка на панели задач.

Обновление

В D2007 есть ошибка TApplication.Run (которая исправлена ​​по крайней мерев XE2), что заставляет вышеуказанное решение вообще не показывать основную форму.Это пропущенный оператор FInitialMainFormState := wsMinimized; в ветви SW_SHOWMINNOACTIVE.

В D2007 используйте WindowState, но OnCreate формы слишком рано для его установки, VCL назначает основную форму после OnCreate запускает и изменяет некоторые стили окон.Используйте OnShow вместе с флагом, чтобы не устанавливать состояние окна при жизни приложения, кроме как при запуске.

type
  TForm1 = class(TForm)
    ..
  private
    FRunOneTime: Boolean;
    ..

procedure TForm1.FormShow(Sender: TObject);
begin
  if not FRunOneTime then begin
    WindowState := wsMinimized;
    FRunOneTime := True;
  end;
end;
0 голосов
/ 19 мая 2018

Если Windows является целевой ОС:

Просто установите свойство WindowState вашей основной формы на wsMinimized во время разработки.

Вы также можете сделать это во время выполнения в форме OnCreate событие:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;
...