最小化应用程序(不使用trayicon)

时间:2018-05-19 17:43:30

标签: delphi delphi-2007

我已经阅读了很多关于此事但我似乎越来越困惑,我读的越多。我使用的是Delphi 2007,我想在启动时最小化我的应用程序,我对系统托盘图标不感兴趣,只需要一个任务栏图标就可以恢复应用程序。

如果您只使用主窗体和.dpr文件集中的最简单的所有项目:

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

并运行应用程序,没有TASKBAR ICON可见,因此无法恢复和激活应用程序。

在没有显示主要表单然后使其最小化的情况下最小化启动的正确方法是什么?这看起来很简单,但对我来说却不是。

2 个答案:

答案 0 :(得分:2)

事实上,这很简单并在文档中进行了解释,但有点难以找到,因为它没有与您期望/搜索它的位置相关联。

System.CmdShow

  

指定显示应用程序主窗口的标志。


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


没有记录,但唯一支持的标记为SW_SHOWMINNOACTIVESW_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;

答案 1 :(得分:0)

如果Windows是目标操作系统:

只需在设计时将您的主要表单WindowState属性设置为wsMinimized

您也可以在运行时以OnCreate事件的形式执行此操作:

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