【发布时间】:2015-02-22 20:30:57
【问题描述】:
我有一个 Delphi 3 应用程序,它已经广泛分布了至少十年。今天我收到一份报告,称该应用程序在 Asus Transformer T100TA-C1-GR(S) Windows 8 平板电脑上无法正常运行。具体来说,该应用程序拒绝运行,因为它检测到屏幕分辨率太小,以至于应用程序无法正确显示自身。在应用程序中,我有以下条件检查:
if (Screen.Width < 800) or (Screen.Height < 600) then begin
// display a message reporting screen resolution too low
ShowMessage('blah blah...');
Application.Terminate;
当我编译了我的应用程序的特殊版本以帮助调试问题并将应用程序提供给投诉用户时,他们报告了以下数字:
Width: 980
Height: 550
这是我添加的特殊编译的额外代码,然后我提供给用户:
ShowMessage('Width: ' + IntToStr(Screen.Width) + #13#10 +
'Height: ' + IntToStr(Screen.Height));
但是,用户发誓他们的平板电脑配置为 1368x768。他们甚至切换到 1024x768 并且 Delphi 报告了相同的错误数字。
所有 TForm.Scaled 属性都设置为 False。
一个可能有帮助的线索...屏幕宽度和高度检测代码(上)在以下过程中运行:
procedure TForm1.WMDisaplayChange(var m: TWMDisplayChange);
知道会发生什么吗?
【问题讨论】:
-
让他们在兼容性设置中设置禁用显示缩放。
-
这意味着操作系统错误地报告了屏幕尺寸,而不是 Delphi 3。Delphi(甚至 3)通过 API 调用(特别是 GetSystemMetrics)检索它们,因此它报告的是操作系统告诉它的内容.
标签: delphi