如何调整在 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
作为 TEdit
和 TButton
的容器。
将 TButton
属性 AlignTopWith
、AlignBottomWith
、RightOf
设置为 TEdit
实例。同时将 AlignWithMargins
设置为 True
并调整 Margins
假设我们正在讨论一个 VCL 应用程序:一个表单有一个事件 OnBeforeMonitorDpiChanged and OnAfterMonitorDpiChanged。在这种情况下,您可以随意调整。
或者,您可以覆盖 WM_DPICHANGED:
的表单消息处理程序
程序 WMDpiChanged(var _Msg: TWMDpi);留言WM_DPICHANGED;
在 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
作为 TEdit
和 TButton
的容器。
将 TButton
属性 AlignTopWith
、AlignBottomWith
、RightOf
设置为 TEdit
实例。同时将 AlignWithMargins
设置为 True
并调整 Margins
假设我们正在讨论一个 VCL 应用程序:一个表单有一个事件 OnBeforeMonitorDpiChanged and OnAfterMonitorDpiChanged。在这种情况下,您可以随意调整。
或者,您可以覆盖 WM_DPICHANGED:
的表单消息处理程序程序 WMDpiChanged(var _Msg: TWMDpi);留言WM_DPICHANGED;