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

Как сделать TFontDialog масштабируемым на High DPI в Delphi: Решение проблемы нечитаемости

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Как сделать TFontDialog масштабируемым на High DPI в Delphi

Разработка программного обеспечения для мониторов с высоким разрешением (High DPI) может представлять определенные трудности. Одна из таких проблем связана с использованием диалогов выбора шрифта в Delphi, в частности, компонента TFontDialog. В данной статье мы рассмотрим, как решить проблему нечитаемости элементов управления в диалоге TFontDialog при работе на мониторах с разрешением более 200%.

Проблема

Разработчики, использующие Delphi 10.3.3 и выше, сталкиваются с проблемой масштабирования элементов управления в диалоге TFontDialog на мониторах с высоким разрешением. Это связано с тем, что Delphi не всегда корректно масштабирует содержимое диалога, что приводит к нечитаемости текста и других элементов при увеличении масштаба более 200%.

Решение проблемы

Для решения данной проблемы необходимо учитывать настройки осознанности DPI (DPI-awareness) в Delphi. Существуют различные режимы осознанности DPI, но для работы на нескольких мониторах с разным разрешением рекомендуется использовать настройки "Per Monitor" или "Per Monitor V2".

Шаг 1: Настройка осознанности DPI

  1. Откройте файл проекта (.dproj) вашего приложения в Delphi.
  2. Перейдите в раздел "Project Options" -> "Manifest".
  3. Выберите нужный режим осознанности DPI ("Per Monitor" или "Per Monitor V2").
  4. Сохраните изменения и перекомпилируйте проект.

Шаг 2: Использование альтернативного класса для TFontDialog

Если предыдущий шаг не решил проблему, можно использовать альтернативный подход с применением класса-посредника, который переопределяет поведение TFontDialog:

type
  TFontDialog = class(Vcl.Dialogs.TFontDialog)
  protected
    function TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool; override;
  end;

function TFontDialog.TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;
var
  previousDpiContext: DPI_AWARENESS_CONTEXT;
begin
  previousDpiContext := SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE);
  try
    Result := inherited TaskModalDialog(DialogFunc, DialogData);
  finally
    SetThreadDpiAwarenessContext(previousDpiContext);
  end;
end;

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

Альтернативное решение

Если предыдущие шаги не помогли, можно воспользоваться альтернативным подходом, предложенным в сообществе разработчиков. Суть заключается во временном изменении режима осознанности DPI на "System aware" во время отображения диалога и возврате к предыдущему режиму после его закрытия. Для реализации этого подхода можно создать интерфейсный класс, который будет служить заместителем для TFontDialog.

Заключение

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

Эта статья предназначена для специалистов, работающих с Delphi, и включает в себя примеры кода на Object Pascal, что соответствует основной тематике сайта.

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

Статья предназначена для разработчиков, использующих Delphi, и описывает, как сделать диалог выбора шрифта `TFontDialog` масштабируемым на мониторах с высоким разрешением (High DPI).


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

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




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


:: Главная :: Диалоги и Фреймы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:47:57/0.003838062286377/0