如何使用C ++ builder(Firemonkey)获取屏幕大小

时间:2015-02-20 17:20:28

标签: c++ c++builder firemonkey-fm3 c++builder-xe6

我知道这是一个愚蠢的问题,但是当改变视觉库时,我发现了一个"麻烦"与FMX ... 我的问题是:我需要做自己的边框,所以我设置为Border Style:" None",但应用程序全屏运行,也覆盖了Windows工具栏,所以我想要一种方式根据屏幕重新调整申请表格的大小,例如:

mainForm->Height = Screen->Height - 10;

可以使用VCL,但有没有办法使用FMX库? 我对FMX的最大限制是(我不知道它是如何返回值的,以及值的类型):

Screen->Size(); // TSize

我现在也接受了它,但我有编译错误:

TSize* Tamanho = new TSize;
Tamanho = Screen->Size();
frmPrincipal->Width = Tamanho->Width;
frmPrincipal->Height = Tamanho->Height - 10;

错误:" E2034无法隐蔽' TSize'到' TSize *'"

最后我试图把它放在frmPrincipal.h上,但同样的错误:

TSize *Tamanho;

PS:解决"主要问题的其他可能解决方案"是可以接受的......

非常感谢!

1 个答案:

答案 0 :(得分:4)

TScreen::Size()返回TSize结构的实际实例,而不是TSize*指针。您需要相应地更改代码:

TSize Tamanho = Screen->Size();
frmPrincipal->Width = Tamanho.Width;
frmPrincipal->Height = Tamanho.Height - 10;

或者,您可以使用FMX的Platform Services框架直接访问IFMXScreenService界面(这是TScreen::Size()在内部使用的内容):

_di_IInterface Intf;
if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXScreenService), Intf))
{
    _di_IFMXScreenService Svc = Intf; 
    TPoint size = Svc->GetScreenSize().Round();
    frmPrincipal->Width = size.X;
    frmPrincipal->Height = size.Y - 10;
}