Если вы разрабатываете приложение на Delphi для Windows 10 и хотите определить, находится ли устройство в режиме планшета, вам понадобится использовать соответствующие API Windows. Режим планшета в Windows 10 позволяет пользователям переключаться между режимами использования устройства, оптимизированными для работы с клавиатурой и мышью (режим настольный) и сенсорным экраном (режим планшета).
Шаг 1: Понимание проблемы
Перед тем как приступить к коду, важно понять, что вам нужно определить, активирован ли режим планшета на конкретном устройстве, а не просто определить, является ли устройство планшетом.
Шаг 2: Использование C++ библиотеки
Для решения этой задачи было решено использовать C++ библиотеку, которая общается с API Windows для определения режима планшета. Код библиотеки был взят из блога Microsoft и модифицирован для использования в Delphi. Для компиляции библиотеки требуется Visual Studio.
Шаг 3: Компиляция библиотеки
Код библиотеки dll.cpp включает в себя функции для работы с API Windows UI View Management, которые позволяют определить текущий режим взаимодействия пользователя с устройством.
// Пример кода из dll.cpp
#include <wrl/client.h>
#include <windows.ui.viewmanagement.h>
#include <UIViewSettingsInterop.h>
#include <wrl/wrappers/corewrappers.h>
namespace WRL = Microsoft::WRL;
namespace VM = ABI::Windows::UI::ViewManagement;
class Backend {
public:
static Backend &instance()
{
static Backend m_instance;
return m_instance;
}
WRL::ComPtr<IUIViewSettingsInterop> interop() { return m_interop; }
private:
Backend()
{
// Инициализация COM и получение интерфейса для работы с режимом планшета
}
// Остальная часть класса
};
// Функция GetTabletMode для определения режима планшета
extern "C" __declspec(dllexport) int GetTabletMode(HWND hwnd)
{
// Реализация функции
}
Шаг 4: Интеграция с Delphi
Для использования библиотеки в Delphi, создается внешняя функция GetTabletMode, которая будет вызывать соответствующую функцию из библиотеки.
// Пример кода из Unit0.pas
unit Unit0;
interface
uses
Forms, Dialogs, Controls, StdCtrls, Classes;
type
TForm0 = class(TForm)
CheckButton: TButton;
procedure CheckButtonClick(Sender: TObject);
private
public
end;
var
Form0: TForm0;
function GetTabletMode(hwnd: THandle): Integer; external 'TabletUtils.dll' cdecl;
implementation
{$R *.dfm}
procedure TForm0.CheckButtonClick(Sender: TObject);
var
TabletModeStr: String;
begin
case GetTabletMode(Self.Handle) of
0: TabletModeStr := 'OFF';
1: TabletModeStr := 'ON';
else TabletModeStr := 'ERROR';
end;
MessageDlg('Tablet Mode: ' + TabletModeStr, mtInformation, [mbOK], 0);
end;
end.
Шаг 5: Тестирование
После компиляции библиотеки и интеграции в Delphi проект, можно проверить работу приложения.
// Пример вывода из командной строки
[prompt]> cl /nologo /DDLL /DNDEBUG /DUSRDLL /D_WINDOWS /MT dll.cpp /link /NOLOGO /DLL /OUT:TabletUtils.dll ole32.lib runtimeobject.lib
[prompt]> dir /b
// Список файлов в директории, включая скомпилированную библиотеку TabletUtils.dll
[prompt]> App0.exe
// Запуск приложения
Шаг 6: Обработка результатов
При нажатии на кнопку в приложении, вызывается функция GetTabletMode, которая возвращает статус режима планшета: ON или OFF.
Заключение
Используя данный подход, вы можете определить, находится ли устройство в режиме планшета, и соответствующим образом адаптировать поведение вашего приложения на Delphi для Windows 10.
Указания по определению режима планшета в приложении на Delphi для Windows 10 с использованием API Windows.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS