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