我最近得到了一台新的开发计算机,同样有 2 个显示器,但不幸的是它有 Windows 10。
现在我还有一些仍在 Delphi 7 中开发的工具,它们可以工作,但有一个恼人的问题。
当我启动 Delphi 7 应用程序时,icon任务栏上的任务栏不会移动到第二个显示器。
任务栏设置为在打开的监视器的任务栏上显示图标。这适用于除 Delphi 7 应用程序之外的所有应用程序。
该图标始终保留在主显示器上。
我有可用的源代码,所以我想知道是否需要将某些内容放入源代码中,或设置一些属性才能使其正常工作?
谷歌搜索后发现很多情况下,表单没有移动到第二个显示器,但我没有在任务栏上找到任何有关该图标的信息。
这是因为与任务栏按钮关联的窗口句柄是Application对象拥有的窗口句柄,而不是主窗体的窗口句柄。
在 Delphi 的更高版本中,您将在 .dpr 文件中写入Application.MainFormOnTaskBar := True,这将改变行为,以便任务栏按钮与您的主窗体相关联。我相信这MainFormOnTaskBar是在 Delphi 2007 中引入的。
迁移到现代版本的 Delphi 是解决该问题的理想方法。如果您不能做到这一点,那么您需要破解 VCL 代码,以确保主窗体的窗口句柄是与任务栏按钮关联的句柄。这可能不是一件容易的事。从根本上说,您正在为继续使用早已过时的工具进行开发付出代价。
正如雷米指出的那样,不需要太多的黑客攻击就能完成最低限度的工作。更改窗口的窗口样式Application以删除WS_EX_APPWINDOW样式,并让主窗体重写该CreateParams方法将其所有者窗口设置为NULL,即Params.WndParent := 0。
我怀疑该行为不会像使用现代 VCL 应用程序那样顺利。例如,VCL 已被修改以减少其执行的窗口重新创建量,这在主窗口与任务栏按钮相关联时变得更加重要。
| 归档时间: |
|
| 查看次数: |
713 次 |
| 最近记录: |