第一次,我在用delphi创建一个“复杂”的UI时遇到了一些问题。我使用4K显示器进行开发和测试,并且我有一些扩展问题。
我的应用程序使用两列设计,想像一下源代码控件下的不同视图,其中有一个左窗格和一个右窗格,它们以组件的方式镜像自己,但这些组件的内容(文本)是不同的。
为了给你一个概念,我在调整窗体大小时这样做:
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),并且不使用花哨的组件(只使用“普通”VCL)。
发布于 2020-06-13 02:14:36
在读了一篇很好的tutorial by Žarko Gajić之后,我做了这样的事情:
Pad := MulDiv(8, Monitor.PixelsPerInch, 96);
grdpnlCover.Left := pnlCoverImage.Left + pnlCoverImage.Width + Pad;
其中8是未缩放值,96是设计表单时使用的DPI。
https://stackoverflow.com/questions/58773669
复制相似问题