如何使用FiremonkeyFM³获得屏幕尺寸?以下代码:
var
Size: TPointF;
begin
Size := FMX.Platform.IFMXScreenService.GetScreenSize;
...
end;
导致此编译器错误:
[dcc32 Error] Unit1.pas(46): E2018 Record, object or class type required
我应该如何使用IFMXScreenService
界面来获取屏幕尺寸?
试试这个 :
var
ScreenSize: TSize;
begin
ScreenSize := Screen.Size;
Caption := IntToStr(ScreenSize.Width) + '*' + IntToStr(ScreenSize.Height);
end;
这不是那么简单。
Firemonkey具有称为分辨率http://docwiki.embarcadero.com/RADStudio/XE5/en/Working_with_Native_and_Custom_FireMonkey_Styles的功能
这是一个很酷的功能。如果您使用具有视网膜显示的屏幕,那么您在屏幕上绘制的任何内容都将非常小。例如,iPhone的像素分辨率接近iPad 1和2,但屏幕大两倍。
所以在iPhone上会
var
ScreenSize: TSize;
begin
ScreenSize := Screen.Size;
Caption := IntToStr(ScreenSize.Width) + '*' + IntToStr(ScreenSize.Height);
end;
看起来像320x480。形式一样。
但是如果你使用FMX.Platform;
procedure ShowScreenSize;
var
ScreenSvc: IFMXScreenService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenSvc)) then
begin
ScreenSize := Format('Resolution: %fX%f', [ScreenSvc.GetScreenSize.X, ScreenSvc.GetScreenSize.Y]);
ShowMessageFmt('Screen.Width = %g, Screen.Height = %g', [ScreenSize.X, ScreenSize.Y]);
end;
end;
您可以获得实际的屏幕分辨率
这也适用于带Retina显示屏的Mac。
这是一个稍微更完整/清晰的答案,可以在Android(可能是iOS,没有测试)设备上获得实际的屏幕分辨率(以像素为单位):
var
clientScreenScale : Single;
clientScreenSize : TSize;
clientScreenService : IFMXScreenService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(clientScreenService)) then
begin
clientScreenScale := clientScreenService.GetScreenScale;
end
else clientScreenScale := 1;
// The display device's width:
clientScreenSize.CX := Round(clientScreenService.GetScreenSize.X*clientScreenScale);
// The display device's height:
clientScreenSize.CY := Round(clientScreenService.GetScreenSize.Y*clientScreenScale);
end;
这是一个不同的解决方案,不需要按比例倍增:
var
aResolution : JPoint;
begin
aResolution := TJPoint.Create;
TAndroidHelper.Display.getRealSize(aResolution);
end;
在Delphi 10.3 RIO中运行良好。根据我的理解,“getRealSize”至少需要Android 4.2,但由于Delphi RIO甚至不支持旧版本的Android,我不相信这是一个显示阻止。