用于高DPI Windows的Delphi Firemonkey Scale

时间:2014-01-08 11:10:07

标签: delphi firemonkey delphi-xe5

我认为在FireMonkey中扩展应用程序应该很容易,因为它应该也适用于Retina-Mac。似乎有一些背景魔法选择了另一种风格,但在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替代。

2 个答案:

答案 0 :(得分:0)

你可以做这样的事情来改变根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;

答案 1 :(得分:0)

如果有人读到这个...我对Windows桌面Firemonkey的体验是你必须手动处理OS DPI设置,你可以将你的控件放在一个顶级容器(一个TLayout)中,根据操作系统屏幕DPI设置(使用某些低级代码确定)。 但是,在某些情况下,您需要反转此缩放 - 例如,必须缩放Viewport3D 1 / X才能在缩放容器内正确显示。否则将显示像素级工件,图像质量将非常糟糕。 这种放大/缩小技术很有效。

相关问题