我知道如何强制表单与正在运行的应用程序显示在同一个监视器上,但我没有看到如何让帮助或打印机设置对话框显示在同一个监视器上。 “帮助”显示上次显示的位置,但我们希望它显示在应用程序监视器上。 “打印机设置”对话框似乎总是出现在主监视器上
答案 0 :(得分:1)
将父表单的Handle
传递给TPrinterSetupDialog.Execute
似乎可以解决问题。
if PrinterSetupDialog1.Execute(Self.Handle) then
//
使用Delphi 7(TPrinterSetupDialog.Execute
不接受参数),您有两种选择。
最简单的方法是创建自己的TPrinterSetupDialog
后代。 Execute
在TCommonDialog
中是虚拟的,TPrinterSetupDialog
的祖先,它被覆盖。您可以在自己的后代中覆盖它,使用TPrinterSetupDialog
中的代码作为您自己的Execute
覆盖的基础,同时添加overload
。您的重载Execute
会接受ParentHandle: HWND
参数,并将PrintDlgRec.hWndOwner
设置为提供的窗口句柄。
我考虑过为你编写这个(或者至少开始),但还有其他一些你需要从Dialogs
单元复制的东西(在实现部分中定义的函数)包装一些API调用,以及用于对话框消息循环的回调函数),并且我没有D7可用于我甚至尝试编译它。
另一种选择(正如David Heffernan在下面的评论中提到的)将直接自己调用Windows API PrintDlgEx。这在MSDN中的Print Dialog Box (Windows)主题中进行了讨论。再一次,我没有D7可用,所以我不能给你一个从Delphi中使用它的例子。 (我检查过,并没有藏在任何地方。)
我不确定你可以设置帮助窗口的位置;我认为这是由Windows根据用户之前的使用情况自动完成的。 (无论如何,我无法这样做。)