Как получить размер экрана с помощью C++ Builder (Firemonkey)

Я знаю, что это глупый вопрос, но при смене визуальных библиотек я обнаружил «проблему» с FMX... Моя проблема: мне нужно сделать свою собственную границу, поэтому я установил стиль границы: «Нет», но приложение работает в полноэкранном режиме, а также охватывает панель инструментов 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.: Возможны и другие варианты решения "основной проблемы"...

Большое спасибо!


person mauroaraujo    schedule 20.02.2015    source источник
comment
Вы пробовали искать в Интернете что-то вроде размера экрана firemonkey c++ builder?   -  person Thomas Matthews    schedule 20.02.2015
comment
Да, но ничего не найдено... Я также заходил на страницу docwiki, но ничего, что могло бы решить мою проблему.   -  person mauroaraujo    schedule 20.02.2015


Ответы (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;
}
person Remy Lebeau    schedule 20.02.2015