2013-10-06 98 views
5

如何使用FiremonkeyFM³獲取屏幕尺寸?下面的代碼:如何在Firemonkey FM3中獲取屏幕大小?

var 
    Size: TPointF; 
begin 
    Size := FMX.Platform.IFMXScreenService.GetScreenSize; 
    ... 
end; 

結果在此編譯器錯誤:

[dcc32 Error] Unit1.pas(46): E2018 Record, object or class type required 

我應該如何使用IFMXScreenService接口獲取屏幕大小?

+1

這是['一個example'(HTTP ://blogs.embarcadero.com/pawelglowacki/2012/10/08/39817)正確使用['IFMXScreenService'](http://docwiki.embarcadero.com/Libraries/XE4/en/FMX.Platform。 IFMXScreenService)接口。 – TLama

+1

@TLama - 謝謝你。 – Bill

+1

@Bill你不能調用接口類型的方法。您需要先獲得接口參考,然後才能真正執行方法。 –

回答

9

試試這個:

var 
    ScreenSize: TSize; 
begin 
    ScreenSize := Screen.Size; 
    Caption := IntToStr(ScreenSize.Width) + '*' + IntToStr(ScreenSize.Height); 
end; 
+0

「屏幕」究竟是什麼? –

+0

屏幕是在FMX.Forms單元中聲明的全局變量(屏幕:TScreen),可能它只存在於XE4 ..(代碼已使用DXE4進行測試)。 –

+0

「屏幕」在Android下不起作用,例如在我的Galaxy Note 4上,Screen返回的分辨率爲360x640,而不是顯示器的實際分辨率爲2560x1440。 – bLight

3

這不是那麼簡單。

Firemonkey已經功能叫做 http://docwiki.embarcadero.com/RADStudio/XE5/en/Working_with_Native_and_Custom_FireMonkey_Styles

分辨率這是actualy很酷的功能。如果你使用具有視網膜顯示的屏幕,那麼你在屏幕上繪製的任何東西都會很小。例如,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; 

您將獲得實際的屏幕分辨率(以像素爲單位)。

這也適用於Mac Retina顯示器。

0

這裏有一個稍微更完整的/明確的答案來獲得在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; 
相關問題