Определение ориентации 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) {
//...
}
}