如何使用 C++ builder (Firemonkey) 获取屏幕尺寸

mau*_*ujo 0 c++ c++builder firemonkey-fm3 c++builder-xe6

我知道这是一个愚蠢的问题,但是在更改视觉库时,我发现 FMX 存在“麻烦”...我的问题是:我需要做自己的边框,所以我将属性设置为边框样式:“无”,但是该应用程序全屏运行,也覆盖了 Windows 工具栏,所以我想要一种根据屏幕调整申请表大小的方法,例如:

mainForm->Height = Screen->Height - 10;
Run Code Online (Sandbox Code Playgroud)

可以使用 VCL,但是有没有办法使用 FMX 库来做到这一点?我用 FMX 征服的最大值是(我不知道它是如何返回值的,以及值的类型):

Screen->Size(); // TSize
Run Code Online (Sandbox Code Playgroud)

我现在也征服了它,但我有编译器错误:

TSize* Tamanho = new TSize;
Tamanho = Screen->Size();
frmPrincipal->Width = Tamanho->Width;
frmPrincipal->Height = Tamanho->Height - 10;
Run Code Online (Sandbox Code Playgroud)

错误:“E2034 无法将 'TSize' 转换为 'TSize*'”

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

TSize *Tamanho;
Run Code Online (Sandbox Code Playgroud)

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

多谢!

Rem*_*eau 5

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

TSize Tamanho = Screen->Size();
frmPrincipal->Width = Tamanho.Width;
frmPrincipal->Height = Tamanho.Height - 10;
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 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;
}
Run Code Online (Sandbox Code Playgroud)