首页 > 解决方案 > 无论比例因子如何,如何在 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。所以我需要为他们每个人更正获取分辨率。

标签: windowsdelphiscreendelphi-7pascal

解决方案


推荐阅读