如何调整在 Delphi 中制作的高 DPI 感知 Windows 应用程序中无法正确缩放的视觉组件?

How to adjust visual components that don't scale correctly in a high DPI aware Windows application made in Delphi?

中,我设法使用 Monitor.PixelsPerInch 调整组件之间的“填充”。

现在我遇到了一个不同的问题:我在 TEdit(路径)左侧有一个“...”(浏览)TButton。在设计时,两个 VCL 组件在视觉上的 Height 属性 中具有相同的高度。在运行时,在 4K 显示器下(缩放比例为 120%),组件的缩放比例不同,TButton 底部比 TEdit 多了 3 个像素,这导致 GUI 不一致。

发生自动(魔术)缩放后如何调整高度?我还在使用 Delphi 10.4.

Button1.Height:=Edit1.Height;
Button1.Top:=Edit1.Top;

在 FormCreate、FormActivate 或 FormResize 中。

(前提是他们都是children的同一个parent)

使用 TRelativePanel 作为 TEditTButton 的容器。 将 TButton 属性 AlignTopWithAlignBottomWithRightOf 设置为 TEdit 实例。同时将 AlignWithMargins 设置为 True 并调整 Margins

假设我们正在讨论一个 VCL 应用程序:一个表单有一个事件 OnBeforeMonitorDpiChanged and OnAfterMonitorDpiChanged。在这种情况下,您可以随意调整。

或者,您可以覆盖 WM_DPICHANGED:

的表单消息处理程序

程序 WMDpiChanged(var _Msg: TWMDpi);留言WM_DPICHANGED;