彻底搞懂 Windows 显示器 DPI 及其相关功能(三、Delphi 如何适用)

发布于:2024-05-20 ⋅ 阅读:(281) ⋅ 点赞:(0)

目录

一、前言

1. Delphi 12 高分辨率支持设置

2. Delphi 中显示器及DPI相关的单元


一、前言

           系列文章:

  1. 彻底搞懂 Windows 显示器 DPI 及其相关功能(一、高分辨率介绍)
  2. 彻底搞懂 Windows 显示器 DPI 及其相关功能(二、缩放比例感知介绍)
  3. 彻底搞懂 Windows 显示器 DPI 及其相关功能(三、Delphi 如何适用)
  4. Delphi 程序例子(自动感知及显示器相关功能演示)

二、Delphi 对高分辨率显示器的支持

        Delphi 从11.0版本开始支持高分辨率显示器(High DPI)。在此之前的版本中,Delphi应用程序在高分辨率显示器上可能会出现界面模糊、字体大小不一致等问题。

Delphi 11.0 引入了以下针对高分辨率显示器的新功能:

  • 支持 Windows 高 DPI 缩放: Delphi 应用程序现在可以自动缩放其用户界面元素以适应高分辨率显示器。
  • 新的缩放感知控件: Delphi 提供了一系列新的缩放感知控件,这些控件可以自动调整大小和布局以适应不同分辨率的显示器。
  • 改进的文本渲染: Delphi 现在使用新的文本渲染引擎,该引擎可以在高分辨率显示器上提供更清晰的文本。

以下是一些有关 Delphi 如何支持高分辨率显示器的详细信息:

  • Windows 高 DPI 缩放: 当 Delphi 应用程序在高分辨率显示器上运行时,它会自动启用 Windows 高 DPI 缩放。这将导致应用程序的窗口、控件和文本自动缩放以适应显示器的分辨率。
  • 缩放感知控件: Delphi 提供了 TForm、TControl、TButton、TLabel 等一系列新的缩放感知控件。这些控件可以自动调整大小和布局以适应不同分辨率的显示器。例如,TForm 控件将自动调整其大小以填充整个屏幕,而 TLabel 控件将自动调整其字体大小以保持文本可读性。
  • 改进的文本渲染: Delphi 现在使用新的 ClearType 文本渲染引擎,该引擎可以在高分辨率显示器上提供更清晰的文本。ClearType 文本渲染使用亚像素渲染来平滑文本边缘,从而使文本看起来更清晰、更锐利。

        如果您要使用 Delphi 开发高分辨率显示器应用程序,请务必将 Delphi 更新到 11.0 或更高版本。您还可以使用 Delphi 的缩放感知功能和控件来确保您的应用程序在所有分辨率的显示器上看起来都很棒。

1. Delphi 12 高分辨率支持设置

您可以选择以下选项:

  • None: 没有 DPI 感知。
  • Unaware: 当应用程序以 100% 缩放(96 DPI)呈现时,请选择此选项。
  • System Aware: 如果您知道登录计算机时主显示屏的应用程序 DPI,请使用此选项。
  • Per Monitor: 当应用程序以不同的 DPI 渲染内容时,选择此选项,当应用程序在不同 DPI 的显示器之间移动时,可即时更改 DPI 缩放比例。
  • Per Monitor v2: 使用此选项可在应用程序 DPI 发生变化时收到通知。
  • GDI Scaling: 选择此选项,无论在哪个显示屏上显示,都能以正确的比例渲染图形和文本。
2. Delphi 中显示器及DPI相关的单元
  •   Winapi.ShellScaling,
  •   System.Win.HighDpi,

Winapi.ShellScaling 包含的函数:

function GetScaleFactorForDevice; external Shcore name 'GetScaleFactorForDevice' delayed;
function RegisterScaleChangeNotifications; external Shcore name 'RegisterScaleChangeNotifications' delayed;
function RevokeScaleChangeNotifications; external Shcore name 'RevokeScaleChangeNotifications' delayed;
function GetScaleFactorForMonitor; external Shcore name 'GetScaleFactorForMonitor' delayed;
function RegisterScaleChangeEvent; external Shcore name 'RegisterScaleChangeEvent' delayed;
function UnregisterScaleChangeEvent; external Shcore name 'UnregisterScaleChangeEvent' delayed;
function SetProcessDpiAwareness; external Shcore name 'SetProcessDpiAwareness' delayed;
function GetProcessDpiAwareness; external Shcore name 'GetProcessDpiAwareness' delayed;
function GetDpiForMonitor; external Shcore name 'GetDpiForMonitor' delayed;
function GetDpiForShellUIComponent; external Shcore name 'GetDpiForShellUIComponent' delayed;

System.Win.HighDpi 包含函数:

function IsDpiAware: Boolean;
function SetHighDpiAware: Boolean;

提示

        Delphi 12 已经对高分辨率支持的比较完美了,我们在开发的时候,在程序清单(Manifest)中的DPI Awareness中选择Per Monitor v2 即可自动支持自动感知DPI功能。

        关于Delphi 支持高分辨率显示器,包含两个方面,一个是Delphi的开发环境IDE支持高分辨率,一个是开发出来的程序支持高分辨率。目前Delphi 12 无论是IDE还是开发的程序都可以支持高分辨率。只是IDE支持高分辨率还有点小问题,那就是切换屏幕的缩放比例的时候,IDE上部的工具栏会出现变化,而且手工很难在调整正常,必须修改注册表才能恢复到标准状态。参见《【Delphi】IDE 工具栏错乱恢复(含工具)

本节内容结束,参见下一篇:Delphi 程序例子(自动感知及显示器相关功能演示)


网站公告

今日签到

点亮在社区的每一天
去签到