【问题标题】:How to get the screen size with C++ builder (Firemonkey)如何使用 C++ builder (Firemonkey) 获取屏幕大小
【发布时间】:2015-02-20 17:20:28
【问题描述】:

我知道这是一个愚蠢的问题,但是在更改视觉库时,我发现 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.:解决“主要问题”的其他可能解决方案是可以接受的......

非常感谢!

【问题讨论】:

  • 您是否尝试过在互联网上搜索“c++ builder firemonkey screen size”之类的内容?
  • 是的,但没有找到...

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


【解决方案1】:

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多