如何让Delphi XE程序默认启用系统DPI缩放或编程实现?
解决Delphi程序高DPI系统缩放问题
一、编程实现(推荐:嵌入应用程序清单)
直接在程序中嵌入DPI兼容性清单,让Windows默认启用系统缩放,无需手动设置兼容性选项。
在Delphi项目中添加
Application Manifest文件(如果没有的话):- 右键项目 -> Add -> New Item -> 选择Application Manifest(位于
Other分类下)。
- 右键项目 -> Add -> New Item -> 选择Application Manifest(位于
编辑清单文件,找到
<application>节点,添加以下DPI兼容性声明:<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware> <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">unaware</dpiAwareness> </windowsSettings> </application>这会告诉Windows该程序是DPI感知未开启的,系统会自动对其进行缩放,效果和手动开启「系统缩放」一致。
注意:如果你的Delphi版本较旧(如Delphi XE及以前),可能需要手动创建清单文件并关联到项目:
- 新建一个名为
YourApp.manifest的文本文件,写入上述内容。 - 在项目选项(Project Options)的Application标签下,找到Manifest选项,选择「Custom manifest」并指定该文件路径。
- 新建一个名为
二、通过注册表默认启用系统缩放
如果需要为已编译的程序批量设置,可通过修改注册表实现:
打开注册表编辑器(
regedit.exe)。定位到以下路径(针对当前用户):
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
或针对所有用户:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers新建字符串值,名称为你的程序完整路径(如
C:\YourApp\YourProgram.exe),值设为HIGHDPIAWARE=OFF。这个键值对应手动开启「系统缩放」的设置,系统会自动对该程序进行高DPI缩放。
补充说明
- 若你的程序之前设置过
Scaled=True,但现在改为False仍有问题,需确保没有其他代码或第三方组件强制修改了DPI感知设置。 - 部分Delphi版本默认的清单可能带有
dpiAware="true",这会导致系统不自动缩放,必须替换为上述的false和unaware声明。
内容的提问来源于stack exchange,提问作者Andreas Ströbel
相关产品推荐
相关产品推荐

