我有一个Firemonkey HD应用程序并将其部署在iPad 2上。 工作正常。
当我在带有Retina显示屏的iPad 4上部署相同的应用程序时,我遇到了问题。
关键是我在表单上有一些绘图操作,需要精确的表格宽度和高度。
ShowMessage('form wh = ' + FloatToStr(TForm(FImage.Parent.Parent). Width) + ':' + FloatToStr(TForm(FImage.Parent.Parent).Height));
在两台设备上我收到一条消息:
form wh = 1024:748
我需要的是自动更改表单大小。
我该怎么做才能得到它?
更新:我尝试使用Screen.Size.Width但在Retina显示屏上有Screen.Size.Width = 1024。我做错了什么?
答案 0 :(得分:5)
关于“更新”,您需要考虑“设备”像素数与“逻辑”像素数之间的差异。通常情况下,“视网膜”显示器在物理上并不比非“视网膜”显示器大(或者如果是,那与'视网膜'没有任何关系) - 相反,它具有更高的分辨率。此外,这种更高分辨率的要点不是将更多的控件(视图)塞入相同的物理屏幕尺寸 - 这样可以使显示更清晰,更近“封闭”。
因此,逻辑像素的数量 - 用于控制尺寸的单位 - 不会因为“视网膜”显示而上升。这就是为什么IFMXScreenService.GetScreenSize
使用'retina'和非''itina'显示返回相同结果的原因。但是,IFMXScreenService
还有另一种方法GetScreenScale
,可用于在“设备”像素中获取屏幕尺寸:
uses FMX.Platform;
function GetScreenSizeInDevicePixels: TPointF;
var
Service: IFMXScreenService;
begin
Service := IFMXScreenService(
TPlatformServices.Current.GetPlatformService(IFMXScreenService));
Result := Service.GetScreenSize * Service.GetScreenScale;
end;