Определение ориентации iPhone с помощью C ++ - PullRequest
0 голосов
/ 29 октября 2019

Embarcadero C ++ Builder 10.3.2 Enterprise

Выполняя поиск в Интернете, я не смог найти для этого никакого кода FMX. Исходя из кода Delphi, это должно было сработать, но компилятору это не нравится

if (Application->FormFactor->Orientations == Fmx::Types::TScreenOrientations::Landscape) {
    //Landscape
}

Кроме того, значение Application-> FormFactor-> Orientations является одинаковым независимо от ориентации iphone. {System :: SetBase = {Data = {[0] = 11 '\ v'}}} Как определить ориентацию?

1 Ответ

1 голос
/ 01 ноября 2019

Свойство Orientations представляет собой TFormOrientations, которое является System::Set из TFormOrientation значений. Вы не можете использовать Set::operator==, чтобы сравнить его с одним значением, поэтому вы получаете ошибку компилятора. Однако вы можете использовать метод Set::Contains(), чтобы проверить, имеет ли оно заданное значение, например:

if (Application->FormFactor->Orientations.Contains(Fmx::Forms::TFormOrientation::Landscape)) {
    //...
}

В любом случае свойство Orientations указывает, какую ориентацию (и)) формы приложения могут принимать (для значения 11 его 1-й, 2-й и 4-й биты установлены в 1, что соответствует ориентациям Portrait, Landscape и InvertedLandscape, являющимсявключен). Он не сообщает, какова текущая ориентация устройства. Для этого используйте метод IFMXScreenService::GetScreenOrientation(), например:

_di_IFMXScreenService ScreenService;
if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXScreenService), &ScreenService)) {
    if (ScreenService->GetScreenOrientation() == Fmx::Types::TScreenOrientation::Landscape) {
        //...
    }
}

...