这是我第一次用delphi创建“复杂”的UI时遇到一些问题。我使用 4K 显示器进行开发和测试,但遇到一些缩放问题。
我的应用程序使用 2 列设计,想象一下源代码管理下的差异视图,其中有一个左窗格和一个右窗格,它们分别镜像组件,但这些组件的内容(文本)不同。
为了给您一个想法,我在表单调整大小上执行此操作:
edtFixExifLeftFile.Width := Floor((pnlFixExifTop.ClientWidth - (bbpFixExifBrowseLeft.Width * 2 + 42)) / 2);
bbpFixExifBrowseLeft.Left := edtFixExifLeftFile.Left + edtFixExifLeftFile.Width + 5;
edtFixExifRightFile.Left := bbpFixExifBrowseLeft.Left + bbpFixExifBrowseLeft.Width + 16;
edtFixExifRightFile.Width := edtFixExifLeftFile.Width;
bbpFixExifBrowseRight.Left := edtFixExifRightFile.Left + edtFixExifRightFile.Width + 5;
这样两列就占据了 50% 的空间。在高清环境 (1080p) 中使用时,这是像素完美的,但在 4K 环境中,缩放(我的TForm.Scaled = True
)完全“吃掉”了其中一个边距(我使用 8px 边距,缩放比预期多了大约 9px)。这使得 4K 下的外观出现错误(右侧的 TEdit 稍微溢出了 TForm)。
如何在高清和 4K 环境中创建像素完美的 UI?对组件调整大小进行编码的正确方法是什么?
我使用最新版本的 Delphi (10.3),并且不使用花哨的组件(仅使用“stock”VCL)。
读完一篇好文后扎科·加吉奇 (Žarko Gajić) 的教程 https://zarko-gajic.iz.hr/delphi-high-dpi-road-ensuring-your-ui-looks-correctly/我结束了这样做:
Pad := MulDiv(8, Monitor.PixelsPerInch, 96);
grdpnlCover.Left := pnlCoverImage.Left + pnlCoverImage.Width + Pad;
其中 8 是未缩放的值,96 是设计表单所依据的 DPI。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)