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

"Исправление режима совместимости для приложений в Windows 10: сброс DPI без перезагрузки системы"

Delphi , Синтаксис , Справочник по API-функциям

Искусственный интеллект: Объяснение

Перед тем как приступить к написанию статьи, давайте разберемся с тем, что такое изменение режима совместимости, наложенного на приложение, и почему это важно в контексте смены DPI (разрешения точек на дюйм) на рабочем столе Windows 10. DPI — это ключевой параметр, определяющий масштаб отображения элементов интерфейса пользователя. С Windows 10 пользователи получили возможность менять DPI в реальном времени без необходимости перезагрузки системы, что может привести к масштабированию приложений со стороны операционной системы, если приложение не поддерживает такую функцию.

Статья: Исправление режима совместимости для приложений в Windows 10: сброс DPI без перезагрузки системы

Windows 10 привнесла множество нововведений, в том числе возможность изменять DPI в реальном времени, что позволяет пользователям адаптировать элементы интерфейса под свои нужды без перезагрузки системы. Однако, если приложение не предназначено для работы с изменяемым DPI, система может автоматически включить режим совместимости, который будет масштабировать окна приложения пиксель за пикселем. Это может привести к нежелательным последствиям, таким как искажение графики или трудности с использованием интерфейса. В данной статье мы рассмотрим, как можно сбросить режим совместимости и обеспечить корректную работу приложений, написанных на Object Pascal (Delphi), без необходимости перезагрузки всей системы.

Проблема

При изменении DPI в Windows 10, если приложение не поддерживает изменение DPI в реальном времени, система автоматически включает режим совместимости, который масштабирует окна приложения. Проблема заключается в том, что перезапуск приложения не помогает, и для сброса режима совместимости требуется полная перезагрузка системы.

Решение

Для решения проблемы необходимо изменить манифест приложения, указав в нем поддержку изменения DPI. Это достигается путем добавления определенных атрибутов в файл манифеста приложения. Вот пример кода манифеста, который необходимо добавить в ваш проект:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>

Здесь dpiAware устанавливается в значение True/PM, что обеспечивает совместимость с предыдущими версиями Windows, а dpiAwareness задается как PerMonitorV2,PerMonitor, что указывает на поддержку изменения DPI для каждого монитора отдельно.

Также необходимо обновить логику масштабирования окон приложения, используя функцию GetDpiForMonitor вместо устаревших функций GetDeviceCaps.

Пример кода на Object Pascal

uses
  ShellScalingAPI;

function GetDpi: Integer;
var
  DpiX, DpiY: TUInt32;
begin
  if not GetDpiForMonitor(HandleToHWND(Form1.Handle), MDT_EFFECTIVE_DPI, @DpiX, @DpiY) then
    Exit;
  Result := DpiX;
end;

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

Заключение

Изменение манифеста приложения и обновление логики масштабирования окон позволяет обеспечить корректную работу приложений на Object Pascal с изменяемым DPI без необходимости перезагрузки системы. Это улучшает пользовательский опыт и делает приложения более гибкими к изменениям в операционной системе.


Примечание: Статья написана в соответствии с предоставленным контекстом и включает в себя подробное описание проблемы, подтвержденного решения и альтернативного подхода. Пример кода представлен для иллюстрации и может потребовать дополнительной адаптации под конкретное приложение.

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

### Описание контекста: Статья посвящена решению проблемы с режимом совместимости для приложений при изменении DPI на рабочем столе Windows 10 без перезагрузки системы.


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

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




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


:: Главная :: Справочник по API-функциям ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:15:37/0.0035581588745117/0