Windows标题栏中的可视错误,VCL样式启用了应用程序和显示缩放

Tom*_*jor 8 delphi vcl c++builder vcl-styles

目前我正在测试启用VCL样式的应用程序的各个方面.

我注意到,当Windows缩放高于默认的96 dpi/100%时,VCL表单的图标和标题栏文本太大 - 两者都要靠近 - 请参阅附带的屏幕截图.对于200%或250%的更高标度(例如在4K显示器和Windows 10上使用),尤其如此,但即使缩放为144 dpi/150%,问题也已经可见.

对于RAD Studio提供的所有样式都是如此.通过项目设置启用清单的高Dpi感知.如果我在应用程序中禁用VCL样式,则图标和标题栏文本的大小正确.

我在这里错过了什么吗?如果启用显示缩放,开箱即用的样式是否应该没有开箱即用的显示错误?或者是否有一些设置我可以调整以解决这个问题.

谢谢,

在此输入图像描述 在此输入图像描述

Dal*_*kar 11

VCL样式不能正确支持高DPI缩放.

如果您使用VCL样式,则应从应用程序清单中删除高DPI感知.


QP报告请求对VCL样式的一般高DPI支持: VCL样式在高DPI配置下无法正确扩展

NC区域的相关QC报告:在高DPI下,样式表格的非客户区域缩放不正确

  • 看看AlmediaDev的StyleControls.也许风格与HPDI更好地匹配. (3认同)

Tom*_*jor 3

好的,这是我针对视觉错误的解决方案,请参阅随附的屏幕截图。我修复了 Vcl.Forms.pas 中的 3 个地方。

第一个修复(注释为 // Title bar fix 1)解决了在具有 VCL 样式应用程序的默认 96dpi Windows 上即使没有缩放也无法正确绘制图标的问题。我可以根据 James Johnston 的有关 WM_GETICON、ICON_SMALL2 的发现来解决此问题, /sf/answers/2454753661/ 谢谢 James!

另外两个修复解决了启用显示缩放后图标绘制太大以及图标与标题栏文本之间的距离太小的问题。这些是代码中用 // 标题栏修复 2 和 3 注释的修复。GetDpi 只是当前 dpi 值的 getter,该值是我从应用程序内的 C 源代码获取的。

结果并不完美,但目前已经可以了,这样 VCL 风格的应用程序至少在扩展环境下是可以接受的。

感谢大家的意见。

左边是原来的,右边是“固定的”

标题栏修复1

标题栏修复变量

标题栏修复2

标题栏修复3

  • 为了皮特!**永远不要**发布代码图像。代码图像绝对没有用;你不能复制/粘贴,对于那些有视觉障碍的人来说是无法访问的,它们在许多公司代理后面不可用,对于那些使用移动设备的人来说它们绝对很糟糕,它不是搜索的一部分......等等。复制/粘贴/格式化文本比制作屏幕截图、保存到文件、创建链接并上传要容易得多。虽然我赞扬您想要分享您的解决方案,但请正确执行。 (2认同)