隐藏Delphi的“应用程序”窗口是否可以?

时间:2011-06-15 15:49:51

标签: delphi

我们刚刚将我们的应用程序从MDI容器移动到单个文档界面。我们的用户习惯使用MDI父级中的“Windows”菜单来并排显示窗口。我们希望训练他们右键单击Windows任务栏并使用那里的窗口管理功能。

使用Delphi应用程序,我们注意到windows shell为隐藏的“Application”窗口留出了空间。因此,如果我只打开两个窗户,它将安排三个房间。应用程序窗口并未真正显示,但仍有空间。

由于我们有两个不同的应用程序,因此情况更糟。如果他们只在每个应用程序中打开一个窗口并想要并排显示它们,那么实际上会尝试占用4个窗口。

因此,不是看到两个窗口占据屏幕的1/2,而是看到两个窗口占据了桌面的1/4,而屏幕的其余部分则打开了。

我发现在我的应用程序启动时添加一行来隐藏应用程序窗口将解决此问题。

ShowWindow(Application.Handle,SW_HIDE);

  

编辑以防有人不读   直到答案。基于克雷格的   回答下面我正在设置窗口   样式到WS_EX_TOOLWINDOW而不是   隐藏窗户。          SetWindowLong(Application.Handle,GWL_EXSTYLE,           GetWindowLong(Application.Handle,GWL_EXSTYLE)或WS_EX_TOOLWINDOW);

我的(原创)问题是:这是否安全(隐藏应用程序窗口)?我想知道我是否可能通过隐藏应用程序窗口来破坏其他内容。我需要注意哪些副作用?有没有更好的方法来解决这个问题?

我正在使用Delphi 2007.这些问题似乎在Windows XP,Vista和7中保持一致。

更新:有些答案似乎认为问题出在应用程序表单图标上。事实并非如此。我已将MainFormOnTaskbar设置为true。

此外,如果您正在测试,请注意Delphi IDE(仅在2007年测试过)会让事情变得更糟。试试这个。打开Delphi IDE和两个记事本实例。最小化IDE,但两个记事本都未最小化。右键单击选择“并排显示Windows”。您将看到每个记事本占据屏幕的1/3。关闭IDE并再次选择“并排显示Windows”,每个屏幕占据屏幕的一半。

4 个答案:

答案 0 :(得分:5)

在Delphi 2007(及更高版本)中,如果

,应用程序窗口根本不会显示在TaskBar上
Application.MainFormOnTaskbar := True;

行位于项目文件(* .dpr)中。例如

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;   // <--
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TForm8, Form8);
  Application.Run;
end.

这是新应用程序的默认设置,但是如果从以前的Delphi版本移植应用程序,则不存在此行 - 您应该手动添加此行。

答案 1 :(得分:3)

只要MainFormOnTaskBar为true,您就可以通过将此问题添加到DPR来解决问题:

SetWindowLong(Application.Handle, GWL_EXSTYLE,
  GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);

更高版本的Delphi在创建TApplication句柄时会自动包含WS_EX_TOOLWINDOW标志。

答案 2 :(得分:0)

我还在使用Delphi 7,并且我一直在使用这种技术与the 'WndParent:=GetDesktopWindow' trick组合来为每个窗口获取一个任务栏按钮,有点像Microsoft Office开始做的一些版本(我猜XP? )

答案 3 :(得分:-1)

我相信这是应用程序最小化到系统托盘的方式。