Ian*_*oyd 7 windows delphi delphi-5 windows-7 windows-95
我有一个窗口,我想最小化(到任务栏),所以我打电话ShowWindow:
ShowWindow(Handle, SW_MINIMIZE);
Run Code Online (Sandbox Code Playgroud)
除了不是最小化自身(到任务栏),窗口被图标化:

窗口是无人值守的:

如何最小化任务栏的窗口?
更新:
根据2002年的一些建议,我尝试设置WS_EX_APPWINDOW窗口样式和/或确保窗口没有所有者:

不幸的是,这改变了我的(Delphi)应用程序的行为,因为我的应用程序现在有两个任务栏图标,而不是一个:

当然,这是Delphi(5)的神器; 因为我试图解决另一个问题.
但这不应该影响这个问题.我正在调用ShowWindow(..., SW_MINIMIZE)API,而不是最小化窗口Windows正在图标化应用程序.
如何最小化任务栏的窗口?
NGL*_*GLN 10
任务栏上的该图标是Application(Handle)的图标,而不是MainForm的图标.
使用:
Application.Minimize;
Run Code Online (Sandbox Code Playgroud)
编辑:但是从你的链接中,我知道你已经知道了......呃;)
这适用于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;
Run Code Online (Sandbox Code Playgroud)
并从任务栏隐藏Application.Handle(只有MainForm的任务栏图标):Visible将此Form 的属性设置为True并在项目文件中隐藏Application:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
ShowWindow(Application.Handle, SW_HIDE);
Application.Run;
Run Code Online (Sandbox Code Playgroud)
对于这种形式,ShowWindow(Handle, SW_MINIMIZE);shóuld工作.它还在最小化或恢复时提供Windows的默认缩放功能.
(在XP和W7上使用D5和D7测试)