2013-10-06 18 views
5

Come ottenere le dimensioni dello schermo con Firemonkey FM³? Il seguente codice:Come ottenere le dimensioni dello schermo in Firemonkey FM3?

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

I risultati in questo errore di compilazione:

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

Come dovrei usare IFMXScreenService interfaccia per ottenere dimensioni dello schermo?

+1

Ecco [ 'un example'] (http : //blogs.embarcadero.com/pawelglowacki/2012/10/08/39817) di uso corretto di ['IFMXScreenService'] (http://docwiki.embarcadero.com/Libraries/XE4/en/FMX.Platform. Interfaccia IFMXScreenService). – TLama

+1

@TLama - Grazie. – Bill

+1

@Bill Non è possibile chiamare metodi su un tipo di interfaccia. È necessario ottenere un riferimento all'interfaccia prima di poter effettivamente eseguire i metodi. –

risposta

9

Prova questo:

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

Che cosa è esattamente 'Schermo'? –

+0

Lo schermo è un variabile globale (schermo: TScreen) dichiarato nell'unità FMX.Forms, probabilmente esiste solo in XE4 .. (il codice è stato testato usando DXE4). –

+0

"Schermo" non funziona su Android, ad esempio sul mio Galaxy Note 4, Schermo restituisce una risoluzione di 360x640 invece della risoluzione reale del display di 2560x1440. – bLight

3

Non è così semplice.

FireMonkey ha funzione chiamata risoluzione http://docwiki.embarcadero.com/RADStudio/XE5/en/Working_with_Native_and_Custom_FireMonkey_Styles

E 'actualy caratteristica fredda. Se lavori con schermi con retina display, qualsiasi cosa tu dipinga sullo schermo sarà veramente piccola. Ad esempio, la risoluzione in pixel di iPhone è vicino a iPad 1 e 2, ma lo schermo è due volte più grande.

Così su iPhone sarà

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

sarà simile a 320x480. E le stesse forme.

Ma se si utilizza utilizza 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; 

Si ottiene la risoluzione dello schermo effettiva in pixel.

Questo vale anche per Mac con display Retina.

0

Ecco un/risposta chiara leggermente più completa per ottenere la risoluzione dello schermo effettiva in pixel su Android (forse iOS, non prova) dispositivi:

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; 
Problemi correlati