PerMonitorV2 DPI感知下TActionMainMenuBar与CustomTitleBar的RC文件字体异常求助
Delphi添加RC文件后DPI感知修复方案
当你添加与EXE同名的RC文件后,Delphi会优先加载RC里的资源配置,直接覆盖了Project Manifest中设置的DPI感知参数,这就是TActionMainMenuBar、CustomTitleBar出现字体模糊、UI失真的核心原因。需要在RC文件中手动补充DPI感知相关配置,具体操作如下:
关联外部Manifest到RC文件
如果之前已经在Project中配置好包含DPI参数的app.manifest文件,直接在RC里添加代码将Manifest嵌入资源:CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app.manifest"也可以用简化数值写法:
1 24 "app.manifest"(注:1对应CREATEPROCESS_MANIFEST_RESOURCE_ID,24对应RT_MANIFEST资源类型)
直接在RC中嵌入DPI感知Manifest内容
不想依赖外部Manifest文件的话,可把完整Manifest代码直接写在RC里,示例如下:CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST { "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">" " <assemblyIdentity version=\"1.0.0.0\" processorArchitecture=\"*\" name=\"CodeTree\" type=\"win32\"/>" " <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">" " <windowsSettings>" " <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/PM</dpiAware>" " <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2, PerMonitor</dpiAwareness>" " </windowsSettings>" " </application>" "</assembly>" }关键参数说明:
true/PM:声明程序同时支持系统级DPI感知和每显示器DPI感知PerMonitorV2:Windows 10及以上系统支持的高级每显示器DPI模式,可完美适配多屏不同DPI场景,解决字体模糊、UI错位问题
同步Project配置避免冲突
打开Project Options -> Application -> Manifest,选择「Custom manifest」并指向你的app.manifest文件,确保Project和RC的配置完全一致,防止资源加载冲突。验证配置是否生效
编译生成EXE后,用Resource Hacker工具打开EXE,查看「Manifest」节点内容,确认DPI感知相关配置已正确嵌入。
内容的提问来源于stack exchange,提问作者V J
相关产品推荐
相关产品推荐

