Delphi 中High DPI开发注意事项

目录

前言:

什么是High DPI?

一、表现不一致的现象

二、当前的解决方案

三、重点


前言:

什么是High DPI?

High DPI(高分辨率显示)是指显示设备具有高像素密度的特征。它意味着在相同的显示区域内,显示设备能够显示更多的像素,使图像和文本变得更加细腻和清晰。

在传统的低分辨率显示设备上,像素密度相对较低,图像和文本可能会显得模糊或像素化。而在高 DPI 设备上,更多的像素被压缩在相同的物理区域内,使图像和文本更加锐利和清晰。

高 DPI 显示设备的出现,为用户提供了更好的视觉体验,尤其在观看高清内容、查看细节丰富的图像、展示复杂的图形等方面表现突出。

High DPI(高分辨率显示)通常指的是拥有大于 96 像素/英寸(PPI)的显示设备。在这种情况下,可以认为超过 96 PPI 的设备是高 DPI 设备。

然而,随着技术的不断发展,现在许多显示设备的像素密度远高于 96 PPI。例如,智能手机、平板电脑和高端显示器通常具有更高的像素密度,一些设备甚至达到 300 PPI 或更高。

在开发应用程序时,通常将 120 PPI 或更高的设备定义为 High DPI 设备。这是因为在这个像素密度范围内,应用程序通常需要进行额外处理和调整,以确保在高 DPI 设备上呈现良好的用户体验。

对于开发人员而言,需要注意支持高 DPI 的应用程序设计和开发。这包括使用适当的图标、控件和字体尺寸,处理缩放和布局问题,以确保应用程序在高 DPI 设备上呈现良好的用户体验。

Delphi 从11.0版本开始支持High DPI IDE,在这之前的版本都是不支持的,支持和不支持的效果时什么,请看下面,这是在4K(3840x2160)分辨率下,分别运行11.3和10.2.3版本的界面。

Delphi 中High DPI开发注意事项_第1张图片

 Delphi 中High DPI开发注意事项_第2张图片

Delphi 中High DPI开发注意事项_第3张图片

 

Delphi 中High DPI开发注意事项_第4张图片

 从上述图形可以明显看出Delphi 从11.0版本开始支持High DPI IDE的改进,因为是截图,效果并不明显,如果实际在显示器上看,那效果就更明显了,不支持High DPI IDE的界面简直就无法忍受。那么问题来了,使用支持High DPI IDE的Delphi  11版本开发的程序,在2K及一下显示器上正常么?答案是令人遗憾的,UI表现不是完全一致。

IDE支持High DPI IDE了,当然我们开发的时候使用IDE就感觉很舒服了,即便是IDE,英巴卡基诺也是在不断完善,截止到11.3版本,IDE支持High DPI已经基本完成了。那么IDE是支持High DPI,开发出来的程序UI表现不一致该如何解决呢?

一、表现不一致的现象

  • TImage控件:在High DPI IDE上开发,界面上就放一个TImage,然后装载一幅图片,什么参数都不要设置,效果如下:

Delphi 中High DPI开发注意事项_第5张图片 Delphi 中High DPI开发注意事项_第6张图片

 设置Image1.AutoSize := True 效果

 Delphi 中High DPI开发注意事项_第7张图片 Delphi 中High DPI开发注意事项_第8张图片

 设置Image1.AutoSize := False并且Image1.Stretch := True 效果:

Delphi 中High DPI开发注意事项_第9张图片 Delphi 中High DPI开发注意事项_第10张图片

 以上可见,只有将Stretch属性设置为True时,效果才一样,但是在2K显示器下,图片明显不清晰,粗糙。也就是说TImage控件是未适配High DPI的控件。

 

  • TLabeledEdit控件,有时会出现如下效果:

Delphi 中High DPI开发注意事项_第11张图片 Delphi 中High DPI开发注意事项_第12张图片

  

  • TActivityIndicator 控件效果(2K下显示不全)

Delphi 中High DPI开发注意事项_第13张图片 Delphi 中High DPI开发注意事项_第14张图片

 

        是否还有其他控件不很完美兼容,就不是很清楚,使用了才知道,所以在High GPI上开发的程序,一定要在2K分辨率下测试看效果如何,反之亦然。

二、当前的解决方案

  1. 对于TImage控件,可以使用TVirtualImage控件替代,完美支持不同分辨率;
  2. TLabeledEdit控件,请设置LabeledEdit.EditLabel.ParentFont := False;
  3. TActivityIndicator控件似乎没有更好的解决办法,只能通过PPI来判断在个性设置;

三、重点

在开发多分辨率VCL程序的UI时候,对于控件的大小,切记不要使用绝对数值,只要使用绝对数值,必然导致不同分辨率下UI表现不一致。那么有时候确实需要调整某个控件的位置,大小该如何操作呢,最好使用相对大小,相对于Form的width、Height、Top、Left等,不直接写数值。如果不考虑兼容多分辨率,这些当然就不是问题了。

 

你可能感兴趣的:(Delphi,HighDPI,Delphi,4K,Delphi,高分辨率)