• 0
Alex7wrt

Определение положения экрана

Вопросы

Добрый день.
В приложении использую только портретную ориентацию экрана.

Application.FormFactor.Orientations := [TFormOrientation.Portrait];

Необходимо определить, что устройство повернулось в альбомный вид (при этом интерфейс все время отображается в портретном виде)

Как такое реализовать? Есть ли такие функции в FMX или обязательно нужно использовать датчики?

Изменено пользователем Alex7wrt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 ответов на этот вопрос

  • 0

Там есть пример как отследить изменение положения экрана

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо, но тот код не работает, когда всегда только портретная ориентация. Вы и сами там написали, что он работает при повороте приложения, но не устройства. А мне нужно чтобы приложение не поворачивалось, но я знал, в какой ориентации сейчас сам телефон.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Самый простой и тупой способ это у формы в OnResize анализировать ширину и высоту. Этот способ будет одинаково работать везде.

Если хочется более нативного варианта решения задачи, то можно воспользоваться TfgApplicationEvents.OnDeviceOrientationChanged.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо, с OnResize уже начал делать, нужно попробовать с TfgApplicationEvents.OnDeviceOrientationChanged 

Наверно, вы имели ввиду TfgApplicationEvents.OnOrientationChanged?

Изменено пользователем Alex7wrt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
10 минут назад, Alex7wrt сказал:

Спасибо, с OnResize уже начал делать, нужно попробовать с TfgApplicationEvents.OnDeviceOrientationChanged 

Наверно, вы имели ввиду TfgApplicationEvents.OnOrientationChanged?

Да точно! :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вариант с TfgApplicationEvents.OnOrientationChanged тоже не подходит. 

Следующий код

procedure TForm1.fgApplicationEvents1OrientationChanged(const AOrientation: TScreenOrientation);
begin
    if AOrientation = TScreenOrientation.Portrait then text7.Text:='portrait'
    else if AOrientation = TScreenOrientation.Landscape then text7.Text:='landscape';
end;

Всегда возвращает 'portrait' при вращении устройства.

По-видимому остается только вариант с OnResize и сравнением ширины и высоты.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу