2014-01-08 58 views
7

我以爲縮放,因爲它是這樣運作的視網膜的Mac太FireMonkey應用程序應該很容易。似乎有一些背景魔法可以選擇另一種風格,但在Windows中似乎並非如此。德爾福Firemonkey比例高DPI的Windows

在VCL有TForm.Scaled它執行作業(更多或更少)。

對於FireMonkey,我發現這個Article by Embarcadero,但似乎Embarcadero不太確定此方法是否有用,因爲在XE5中,sampleproject「ControlsDemo」不再包含scale-trackbar。它還要求在可以設置比例因子的所有窗體中都有一個root-TLayout。我的表單中沒有這樣的元素(我害怕添加一個元素,因爲我不能確定是否運行另一個firemonkey bug)。

所以,我怎麼考慮使用FireMonkey不同DPI的設定?我試圖盜用TPlatFormWin並將CurrentScreenScale設置爲2,但它不起作用:我有黑色工具欄,但沒有縮放,但至少它使用了提供的TImage.MultiResBitmap中的HighRes替代方法。

+0

所以,你有一個高DPI顯示器或者你試圖模擬一個普通96 dpi的顯示器上? –

+1

兩者;-)我有一臺HighDPI Windows平板電腦,並通過字體設置在PC上進行模擬。 –

+2

唉,但該文章中引用的基於矢量的樣式被XE3中的基於位圖的樣式替代(或更確切地說:「平臺」樣式現在是基於位圖的)。因此,「視網膜」顯示器現在通過包括*兩套Mac位圖樣式而不是樣式格式自身的固有分辨率獨立性來支持。也就是說,如果您可以使用自定義樣式,您是否嘗試過產品附帶的自定義樣式之一?大多數仍然是基於矢量的IIRC。 –

回答

0

U可以做這樣的事情來改變根TLayout:

100是默認

if windowsscale>0 then begin 
    LayoutScale.height:=ClientHeight*100/windowsscale; 
    LayoutScale.Width :=Clientwidth*100/windowsscale; 
    LayoutScale.Scale.X:=windowsscale/100; 
    LayoutScale.Scale.Y:=windowsscale/100; 
end; 
0

如果有人讀這個......我用Windows桌面Firemonkey的經驗是,你必須請手動關閉OS DPI設置,並且將控件放置在根據OS屏幕DPI設置(使用某些低級代碼確定)設置Scale的頂部容器(TLayout)中即可。 但是,有些情況下需要反向縮放 - 例如,Viewport3D必須縮小1/X才能在放大的容器內正確顯示。否則會出現像素級別的僞像,圖像質量將會很糟糕。 這種放大/縮小技術效果很好。