windows - 无论比例因子如何,如何在 Delphi 7 中获得真实的显示分辨率?
问题描述
当比例超过 125% 时,我在 Delphi 7 中获得屏幕分辨率时遇到了一些问题。
我用于测试的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
MonId: integer;
Mon: TMonitor;
AllMonitorsWidth, AllMonitorsHeight: integer;
begin
Memo1.Clear;
Memo1.Lines.Append(Format('Number of monitors: %d', [Screen.MonitorCount]));
for MonId := 0 to Screen.MonitorCount - 1 do
begin
Mon := Screen.Monitors[MonId];
With Memo1.Lines do
begin
Append('');
Append(Format('-------- Monitor #%d --------', [mon.MonitorNum]));
Append(Format('Resolution: %dpx x %dpx', [Mon.Width, Mon.Height]));
Append(Format('X-offset: %dpx', [Mon.Left]));
Append(Format('Y-offset: %dpx', [Mon.Top]));
end;
end;
AllMonitorsWidth := GetSystemMetrics(SM_CXVIRTUALSCREEN);
AllMonitorsHeight := GetSystemMetrics(SM_CYVIRTUALSCREEN);
With Memo1.Lines do
begin
Append('');
Append('-------- All monitors --------');
Append(Format('Resolution: %dpx x %dpx', [AllMonitorsWidth, AllMonitorsHeight]));
Append(Format('PPI: %d', [Screen.PixelsPerInch]));
end;
end;
例如,我在具有 1366x768 显示器和 Windows 7 的笔记本电脑上运行此测试。结果:
正如您在 150% 和 200% 比例程序上看到的那样,程序检测到错误的 DPI=96 并且分辨率也不正确。
我认为在现代版本的 Delphi 中可能会修复。但是对于 Delphi 7 是否有任何解决方案而不升级到较新版本?
此外,可能有不止一个显示器和不同的 DPI。所以我需要为他们每个人更正获取分辨率。
解决方案
推荐阅读
- java - 我从 UI 中的日历获取日期,格式为 dd/mm/yyyy。但我想要 18 年 7 月 12 日的格式
- ruby-on-rails - Rails 5 的条件验证
- xcode8 - 如何在 macOS 10.13.5 上配置 XCode 8.3.2 以使用 wxWidgets 3.1.1 开发应用程序?
- c# - 如何在 tapiex activex v3.6 中获得每条线路的多个呼叫?
- c# - ffmpeg--chrome 在服务器处理后无法加载 mp4
- java - 自联接表中的 TreeView
- azure - 授予 Azure Function 对 ARM REST API 的访问权限
- python - 图像操作不适用于多处理
- angular - Angular 6 - 如何将配置从`.forRoot()`传递到模块内的服务?
- sharepoint - 仅为用户创建的项目而不是列表中的所有项目配置共享点警报