Delphi 同一台机器上的两个应用程序的屏幕尺寸不同...如何解决?
Delphi screen dimensions differ on two apps on same machine...how to resolve?
我有两个应用程序使用了一些相同的表单。当我 运行 应用程序时,我注意到这些表格显示不同。我把这段代码放在项目源码的顶部:
var f: TextFile;
s: String;
{$R *.res}
begin
s := TPath.GetFileNameWithoutExtension(Application.ExeName);
AssignFile(f, s + '-screen.txt');
Rewrite(f);
Writeln (f, s + '.Desktop TLHW: ' + IntToStr(screen.DesktopTop) + ', ' +
IntToStr(screen.DesktopLeft) + ', ' +
IntToStr(screen.DesktopHeight) + ', ' +
IntToStr(screen.DesktopWidth));
CloseFile (f);
aDAM2-screen.txt 显示:aDAM2.Desktop TLHW:0、0、720、1280
aDAM3-screen.txt 显示:aDAM3.Desktop TLHW:0、0、1080、1920
我不明白这是怎么发生的,并且无法解决这个问题,尤其是考虑到 TScreen 属性是只读的。
可能的解释是,一个程序受 DPI virtualization 约束,另一个则不受约束。系统指定了 150% 的字体缩放比例。
真正的分辨率是 1920 x 1080,aDAM3
正在报告,因为它不受 DPI 虚拟化的影响。
另一方面,aDAM2
受 DPI 虚拟化影响,因此报告虚拟尺寸,即真实尺寸除以 1.5。即 1280 x 720。
我有两个应用程序使用了一些相同的表单。当我 运行 应用程序时,我注意到这些表格显示不同。我把这段代码放在项目源码的顶部:
var f: TextFile;
s: String;
{$R *.res}
begin
s := TPath.GetFileNameWithoutExtension(Application.ExeName);
AssignFile(f, s + '-screen.txt');
Rewrite(f);
Writeln (f, s + '.Desktop TLHW: ' + IntToStr(screen.DesktopTop) + ', ' +
IntToStr(screen.DesktopLeft) + ', ' +
IntToStr(screen.DesktopHeight) + ', ' +
IntToStr(screen.DesktopWidth));
CloseFile (f);
aDAM2-screen.txt 显示:aDAM2.Desktop TLHW:0、0、720、1280
aDAM3-screen.txt 显示:aDAM3.Desktop TLHW:0、0、1080、1920
我不明白这是怎么发生的,并且无法解决这个问题,尤其是考虑到 TScreen 属性是只读的。
可能的解释是,一个程序受 DPI virtualization 约束,另一个则不受约束。系统指定了 150% 的字体缩放比例。
真正的分辨率是 1920 x 1080,aDAM3
正在报告,因为它不受 DPI 虚拟化的影响。
另一方面,aDAM2
受 DPI 虚拟化影响,因此报告虚拟尺寸,即真实尺寸除以 1.5。即 1280 x 720。