任务栏上的那个图标是应用程序(句柄)的图标,而不是主窗体的图标。
采用:
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
将此 Form 的属性设置为True
并隐藏项目文件中的 Application:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
ShowWindow(Application.Handle, SW_HIDE);
Application.Run;
对于这种形式,ShowWindow(Handle, SW_MINIMIZE);
应该可以工作。在最小化或还原时,它还提供了 Windows 的默认缩放功能。
(在 XP 和 W7 上使用 D5 和 D7 测试)