2013-12-20 39 views
0

我有一個Firemonkey高清應用程序,並在iPad 2上部署它。 工作正常。爲什麼表單沒有爲當前分辨率自動調整大小?

當我在iPad 4上使用Retina顯示器部署相同的應用程序時,我遇到了問題。

重點是我對錶單有一些繪圖操作,需要精確的表單寬度和高度。

ShowMessage('form wh = ' + FloatToStr(TForm(FImage.Parent.Parent). Width) + ':' + FloatToStr(TForm(FImage.Parent.Parent).Height)); 

兩個設備上我得到一個消息:

form wh = 1024:748 

我需要的是自動窗體大小變化。

我該怎麼做才能得到它?

更新:我嘗試使用Screen.Size.Width,但Screen.Size.Width = 1024在Retina顯示屏上。我做錯了什麼?

+0

的形式應該是全屏幕(自動調整大小以配合屏幕)。在視網膜和非視網膜屏幕之間,尺寸會相同,尺寸會發生變化。你能更詳細地描述問題還是包含問題的圖像? –

+0

是的,當然。該表格是全屏。奇怪的一點是我有Screen.Size.Width = 1024和Screen.Size.Height = 768。你想得到什麼細節。我會爲他們提供快樂。 – mad

+0

由於窗體是全屏的,所以顯然是自動調整大小的。什麼是實際問題?這個? http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using_Layout_to_Adjust_Different_Form_Sizes_or_Orientations_%28iOS_and_Android%29 –

回答

5

對於您的'更新',您需要考慮'設備'像素數量與'邏輯'像素數量之間的差異。通常情況下,「視網膜」顯示器的實際尺寸並非大於「非視網膜」顯示器(或者如果是這樣,那與「視網膜」本身無關),而是具有更高的分辨率。此外,這個更高分辨率的目的不是將更多的控制(視圖)塞入相同的物理屏幕尺寸 - 這是爲了讓顯示更清晰,更少的「塊狀」靠近。因此,邏輯像素的數量 - 用於大小控制的單位 - 並不僅僅因爲「視網膜」顯示器而增加。這就是爲什麼IFMXScreenService.GetScreenSize與'retina'和non-thetina'顯示返回相同結果的原因。然而,IFMXScreenService有另一種方法,GetScreenScale,你可以使用「設備」像素推導屏幕尺寸:

uses FMX.Platform; 

function GetScreenSizeInDevicePixels: TPointF; 
var 
    Service: IFMXScreenService; 
begin 
    Service := IFMXScreenService(
    TPlatformServices.Current.GetPlatformService(IFMXScreenService)); 
    Result := Service.GetScreenSize * Service.GetScreenScale; 
end; 
+0

是的,您的GetScreenScale()方式對我來說可以。非常感謝。 – mad

相關問題