在XE2应用程序中创建Delphi 7 COM服务器会导致在高DPI笔记本电脑上扩展表单

时间:2016-05-20 01:17:13

标签: delphi com vcl dpi-aware

我们有一个用Delphi 7编写的COM服务器DLL,它是用XE2编写的VCL应用程序使用的。

在Microsoft Surface Book上,分辨率为3000x2000,XE2应用程序启动正常并正常缩放,但当用户单击导致使用COM DLL的选项时,主窗体突然缩小到其大小的一半,以及文本和控件。

我们有一个相关的Delphi 7 VCL应用程序有同样的问题,但我们现在包含一个自定义清单,明确说明DPIAware是错误的。这在Surface Book上运行良好。我们在COM DLL上尝试了相同的技术但它没有效果。

如果我们有优先考虑外部清单的注册表值并且在XE2应用程序中包含清单文件,我们可以使用我们的Delphi 7 COM DLL正确扩展XE2程序。但是,它还使用WinExec从内部执行另一个XE2应用程序,然后第二个XE2应用程序严重缩放。除非直接运行而不是从第一个XE2应用程序中运行,否则包含第二个XE2应用程序的清单无效。

奇怪或不是,如果我们在XE2中构建一个COM服务器,它总是在高DPI情况下正确扩展,即使没有自定义清单,所以我们目前正在尝试将Delphi 7 DLL转换为XE2,但它是#sa;由于XE2不再提供许多遗留组件包,因此需要做很多工作。

请注意,一旦为COM服务器调用CoCreate,XE2应用程序就会缩小。当释放COM服务器时,它不会缩放回原始大小。

有没有人有任何关于如何让Delphi 7 DLL向Windows报告它不支持DPI的想法,以便使用它的其他非DPI识别应用程序不会突然缩放?

1 个答案:

答案 0 :(得分:0)

我遇到了与VB6 Exe和.Net Com Interop Dll类似的问题(两者都不支持DPI)。 在具有高DPI设置的显示器上,突然窗口大小发生变化。
此解决方法解决了这个问题:我设置了exe的兼容性设置'在高DPI设置下禁用显示缩放'。