最小化应用程序(不使用托盘图标)
Minimize Application (NOT using trayicon)
我读了很多这方面的资料,但我似乎越读越糊涂。我正在使用 Delphi 2007,我想在启动时最小化我的应用程序,我对系统托盘图标不感兴趣,只需要一个任务栏图标即可恢复应用程序。
如果您采用所有项目中最简单的一个,只有一个主窗体并在 .dpr 文件集中:
Application.MainFormOnTaskBar := true;
Application.ShowMainForm := false;
和运行应用程序,没有可见的任务栏图标,因此无法恢复和激活应用程序。
在启动时最小化而不显示主窗体然后将其最小化的正确方法是什么?这看起来很简单,但对我来说却不是。
如果Windows是目标OS:
只需在设计时将主窗体的 WindowState
属性 设置为 wsMinimized
。
您也可以在运行时在表单的 OnCreate
事件中执行此操作:
procedure TForm1.FormCreate(Sender: TObject);
begin
Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;
事实上,这很简单,在文档中有解释,但有点难以找到,因为它没有从您可能 expect/search 找到它的地方链接。
Specifies the flags for displaying the application's main window.
procedure TForm1.FormCreate(Sender: TObject);
begin
CmdShow := SW_SHOWMINNOACTIVE;
...
没有记录,但唯一支持的标志是 SW_SHOWMINNOACTIVE
和 SW_SHOWMAXIMIZED
,所以你不能使用 SW_SHOWMINIZED
.
此外,不要忘记删除 ShowMainForm := false;
语句,否则表单将不可见,因此不会有任何任务栏图标。
更新
D2007 的 TApplication.Run
中存在一个错误(至少在 XE2 中已更正)导致上述解决方案根本无法显示主窗体。 SW_SHOWMINNOACTIVE
案例分支中缺少 FInitialMainFormState := wsMinimized;
语句。
在D2007中使用WindowState
,但是窗体的OnCreate
设置太早,VCL在OnCreate
运行后分配主窗体并修改了一些window 样式。将 OnShow
与标志一起使用,这样您就不会在应用程序的生命周期中(启动时除外)设置 window 状态。
type
TForm1 = class(TForm)
..
private
FRunOneTime: Boolean;
..
procedure TForm1.FormShow(Sender: TObject);
begin
if not FRunOneTime then begin
WindowState := wsMinimized;
FRunOneTime := True;
end;
end;
我读了很多这方面的资料,但我似乎越读越糊涂。我正在使用 Delphi 2007,我想在启动时最小化我的应用程序,我对系统托盘图标不感兴趣,只需要一个任务栏图标即可恢复应用程序。
如果您采用所有项目中最简单的一个,只有一个主窗体并在 .dpr 文件集中:
Application.MainFormOnTaskBar := true;
Application.ShowMainForm := false;
和运行应用程序,没有可见的任务栏图标,因此无法恢复和激活应用程序。
在启动时最小化而不显示主窗体然后将其最小化的正确方法是什么?这看起来很简单,但对我来说却不是。
如果Windows是目标OS:
只需在设计时将主窗体的 WindowState
属性 设置为 wsMinimized
。
您也可以在运行时在表单的 OnCreate
事件中执行此操作:
procedure TForm1.FormCreate(Sender: TObject);
begin
Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;
事实上,这很简单,在文档中有解释,但有点难以找到,因为它没有从您可能 expect/search 找到它的地方链接。
Specifies the flags for displaying the application's main window.
procedure TForm1.FormCreate(Sender: TObject);
begin
CmdShow := SW_SHOWMINNOACTIVE;
...
没有记录,但唯一支持的标志是 SW_SHOWMINNOACTIVE
和 SW_SHOWMAXIMIZED
,所以你不能使用 SW_SHOWMINIZED
.
此外,不要忘记删除 ShowMainForm := false;
语句,否则表单将不可见,因此不会有任何任务栏图标。
更新
D2007 的 TApplication.Run
中存在一个错误(至少在 XE2 中已更正)导致上述解决方案根本无法显示主窗体。 SW_SHOWMINNOACTIVE
案例分支中缺少 FInitialMainFormState := wsMinimized;
语句。
在D2007中使用WindowState
,但是窗体的OnCreate
设置太早,VCL在OnCreate
运行后分配主窗体并修改了一些window 样式。将 OnShow
与标志一起使用,这样您就不会在应用程序的生命周期中(启动时除外)设置 window 状态。
type
TForm1 = class(TForm)
..
private
FRunOneTime: Boolean;
..
procedure TForm1.FormShow(Sender: TObject);
begin
if not FRunOneTime then begin
WindowState := wsMinimized;
FRunOneTime := True;
end;
end;