如何正确设计具有高DPI感知能力(已准备好4k)的Delphi应用程序UI?

第一时间,我在使用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有点溢出)。

如何在HD和4K环境中创建像素完美的UI?编码组件大小的正确方法是什么?

我使用的是Delphi(10.3)的最新版本,并且我没有使用任何花哨的组件(仅使用“常规” VCL)。

zhangcy_77 回答:如何正确设计具有高DPI感知能力(已准备好4k)的Delphi应用程序UI?

读完好书tutorial by Žarko Gajić之后,我结束了这一步:

Pad := MulDiv(8,Monitor.PixelsPerInch,96);
grdpnlCover.Left := pnlCoverImage.Left + pnlCoverImage.Width + Pad;

其中8是未缩放的值,而96是设计表单所依据的DPI。

本文链接:https://www.f2er.com/3135153.html

大家都在问