Как избежать автоматической ориентации экрана в приложениях Delphi XE3
Автоматическая ориентация экрана может быть нежелательной функцией, особенно в приложениях, где интерфейс не предназначен для изменения ориентации. В случае использования компонента TRibbon в Delphi XE3, проблема может заключаться в том, что компонент некорректно обрабатывает изменение ориентации экрана, что приводит к зависанию приложения. В данной статье мы рассмотрим, как можно предотвратить автоматическую ориентацию экрана на планшетах, используя примеры на Object Pascal, которые будут полезны разработчикам, работающим с Delphi.
Оригинальный способ ограничения ориентации экрана
Согласно документации Microsoft, существует два основных способа ограничения автоматической ориентации экрана приложения на планшетах:
Метод 1: Изменение файла appxmanifest
Добавление следующего кода в файл appxmanifest может помочь ограничить начальные предпочтения ориентации экрана:
Для использования данного метода в проектах на Delphi потребуется информация о соответствующем API DLL.
Альтернативное решение для Delphi XE3
Разработчик Jim McKeeth предложил решение, основанное на использовании внешней функции, доступной в Windows 8:
unit MetroDisplayRotation;
interface
type
TMetroDisplayRotation = class
public const
ORIENTATION_PREFERENCE_NONE = $0;
ORIENTATION_PREFERENCE_LANDSCAPE = $1;
ORIENTATION_PREFERENCE_PORTRAIT = $2;
ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = $4;
ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = $8;
class procedure SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE: Integer);
end;
implementation
uses
SysUtils, Windows;
{ TMetroDisplayRotation }
class procedure TMetroDisplayRotation.SetDisplayAutoRotationPreferences(
ORIENTATION_PREFERENCE: Integer);
type
TSDARP = procedure(ORIENTATION_PREFERENCE: Integer); stdcall;
var
UserHandle: THandle;
SDARP: TSDARP;
begin
UserHandle := GetModuleHandle('User32.dll');
@SDARP := GetProcAddress(UserHandle, 'SetDisplayAutoRotationPreferences');
if Assigned(SDARP) then
SDARP(ORIENTATION_PREFERENCE);
end;
end.
Использование:
TMetroDisplayRotation.SetDisplayAutoRotationPreferences(TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE or TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED);
Этот код следует использовать только в приложениях для Windows 8, так как соответствующая функция не доступна в других операционных системах.
Также существует менее предпочтительный вариант — отключение автоматической ориентации для всего устройства через редактирование реестра:
Изменение значения параметра Enable на 0 отключит автоматическую ориентацию.
Заключение
В данной статье мы рассмотрели, как можно предотвратить автоматическую ориентацию экрана в приложениях Delphi XE3, используя примеры из реальной практики. Важно помнить, что методы могут зависеть от версии операционной системы и конкретных требований приложения. Разработчикам, работающим с Delphi, следует учитывать эти подходы для обеспечения стабильной и предсказуемой работы своих приложений на устройствах с разной ориентацией экрана.
Статья описывает способы ограничения автоматической ориентации экрана в приложениях Delphi XE3, используя различные методы, в том числе редактирование файла `appxmanifest`, изменение предпочтений ориентации через код и использование внешней фун
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.