Определение ориентации iPhone с помощью C++

Embarcadero C++Builder 10.3.2 для предприятий

Поискав в Интернете, я не нашел для этого кода FMX. На основе кода Delphi это должно было сработать, но компилятору это не нравится.

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

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

1 ответ

В 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) {
        //...
    }
}

Другие вопросы по тегам