任务栏上的图标未移至第二台显示器

时间:2019-01-14 15:59:54

标签: delphi delphi-7

最近我有一台新开发的计算机,该计算机又配备了2台显示器,但不幸的是它具有Windows10。
现在,我还有一些仍在Delphi 7中开发的工具,它们可以工作,但是有一个令人讨厌的问题。

当我启动Delphi 7应用程序时,任务栏上的icon不会移至第二台监视器。
任务栏设置为在监视器的任务栏上显示图标,这些图标已打开。此功能适用于所有应用程序,但Delphi 7应用程序除外。
图标始终停留在主显示器上。

我有可用的源代码,所以我想知道我是否必须在源代码中添加一些内容或设置一些属性以使此功能正常工作?

使用谷歌搜索会出现很多情况,其中表单没有移动到第二个监视器,但是我在任务栏上没有找到有关图标的任何信息。

1 个答案:

答案 0 :(得分:3)

这是因为与任务栏按钮关联的窗口句柄是Application对象拥有的窗口句柄,而不是主窗体的窗口句柄。

在更高版本的Delphi中,您将在{.dpr文件中写入Application.MainFormOnTaskBar := True,这将改变行为,从而使任务栏按钮与您的主窗体关联。我相信MainFormOnTaskBar是在Delphi 2007中引入的。

迁移到现代版本的Delphi是解决问题的理想方法。如果您不能做到这一点,那么您将需要绕开VCL代码,以确保主窗体的窗口句柄是与任务栏按钮关联的窗口句柄。这不太容易。从根本上说,您要为继续使用已经过时的工具进行开发付出代价。


正如雷米(Remy)指出的那样,进行最低限度的工作不需要太多的黑客操作。更改Application窗口的窗口样式以删除WS_EX_APPWINDOW样式,并使主窗体覆盖CreateParams方法以将其所有者窗口设置为NULL,即{{ 1}}。

我怀疑这种行为不会像使用现代VCL应用程序时那样流畅。例如,已对VCL进行了修改,以减少其执行的窗口重新创建的数量,由于主窗口与任务栏按钮相关联,这一点更为重要。