Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Разработка приложений Delphi XE6: настройка поддержки Per Monitor DPI в Windows 8.1

Delphi , ОС и Железо , Windows

Windows 8.1 ввел новую функцию, известную как Per Monitor DPI (PMD), которая позволяет приложениям адаптироваться к различным масштабам экрана на одном и том же мониторе. Это особенно полезно для пользователей, которые имеют мониторы с высоким разрешением или используют несколько мониторов с разными масштабами. Для того чтобы ваше приложение Delphi XE6 было совместимо с этой функцией, необходимо добавить соответствующий манифест.

Шаг 1: Добавление манифеста

В Delphi XE6 и более новых версиях, добавление манифеста можно выполнить через опции проекта. В меню проекта выберите "Options", затем перейдите в раздел "Application" и включите опцию "Use Delphi version info in EXE".

Шаг 2: Определение содержимого манифеста

Вам нужно будет вставить следующий XML-код в поле "Application info" в той же вкладке "Application" опций проекта:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>True/PM</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

Замените значение True/PM на True или False, если вы хотите, чтобы ваше приложение было системно-осознающим DPI или не осознавающим DPI соответственно.

Шаг 3: Тестирование приложения

После добавления манифеста, вам следует протестировать ваше приложение на системе Windows 8.1, чтобы убедиться, что оно корректно обрабатывает различные масштабы экрана.

Важное примечание:

Некоторые пользователи столкнулись с проблемами, когда использовали определенный идентификатор операционной системы в манифесте, который приводил к ошибкам в поведении мыши и покраске окон. Следует избегать использования идентификатора {1f676c76-80e1-4239-95bb-83d0f6d0da78}, который соответствует Windows 8.1 и Windows Server 2012 R2.

Альтернативный подход

Если вы хотите более тонко настроить поддержку DPI, вы можете использовать функцию SetProcessDPIAwareness и GetProcessDPIAwareness из библиотеки shcore.dll. Пример кода на Object Pascal для работы с этими функциями приведен ниже:

unit PerMonitorApi;

interface

type
   TProcessDpiAwareness = LongInt;

const
   Process_DPI_Unaware = 0;
   Process_System_DPI_Aware = 1;
   Process_Per_Monitor_DPI_Aware = 2;

function SystemCanSupportPerMonitorDpi(AutoEnable: Boolean): Boolean;

implementation

uses
   System.SysUtils,
   WinApi.Windows;

type
   TGetProcessDPIAwarenessProc = function(const hProcess: THandle; var ProcessDpiAwareness: LongInt): HRESULT; stdcall;
   TSetProcessDPIAwarenessProc = function(const ProcessDpiAwareness: LongInt): HRESULT; stdcall;

var
   _RequestedLevelOfAwareness: LongInt;
   _ProcessDpiAwarenessValue: LongInt;

function _GetProcessDpiAwareness(AutoEnable: Boolean): LongInt;

...

// ... (омitted for brevity)

end.

Этот код позволяет определить текущий уровень осознанности DPI для процесса и установить его в случае необходимости.

Заключение

Для успешной настройки поддержки Per Monitor DPI в Windows 8.1 с использованием Delphi XE6, вам необходимо правильно добавить манифест в ваше приложение и, при необходимости, использовать дополнительные API для управления осознанностью DPI процесса. Убедитесь, что вы протестировали ваше приложение на целевой платформе, чтобы избежать неожиданных проблем, связанных с масштабированием.

Создано по материалам из источника по ссылке.

Настройка приложений Delphi XE6 для поддержки функции Per Monitor DPI в операционной системе Windows 8.1.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:59:16/0.0051848888397217/1