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

Почему значение PPI в Delphi отличается от реального: решение проблемы в Delphi 10.3 Rio

Delphi , ОС и Железо , Монитор и Экран

Если вы разрабатываете приложение на Delphi 10.3 Rio и вам необходимо знать соотношение точек на дюйм (PPI) экрана, чтобы корректно масштабировать ваше приложение, вы можете столкнуться с ситуацией, когда значение Screen.PixelsPerInch, возвращаемое Delphi, отличается от рассчитанного вами. Это может быть связано с тем, что Delphi использует не реальное PPI устройства, а виртуальное значение, которое может быть изменено пользователем через настройки масштабирования в операционной системе.

Реальный пример из контекста:

Разработчик столкнулся с проблемой, при которой реальное значение PPI его экрана (142 PPI, диагональ 15.5" и разрешение 1920x1080) не совпадало с тем, что возвращало свойство Screen.PixelsPerInch в Delphi (134 PPI). Свойство PixelsPerInch для каждого созданного TForm также отображало это несоответствие. Программа AIDA64 сообщала реальное значение в 142 PPI, что предполагало проблему с расчетом PPI в Delphi.

Подтвержденный ответ:

Рассмотрим, почему в Delphi значение PPI отличается от реального и что с этим делать.

В Delphi PixelsPerInch не всегда отображает реальное физическое PPI устройства. Это значение может быть изменено пользователем через настройки масштабирования в операционной системе. Например, если пользователь установил масштаб в 140%, то значение PPI, возвращаемое Delphi, будет равно 96 PPI (стандартное значение для Windows) умноженное на 1.4.

Важно знать:

  • Для разработки приложений важно использовать PPI, предоставляемое операционной системой, а не реальное PPI устройства.
  • PPI, возвращаемое операционной системой, является виртуальным значением плотности пикселей и может быть изменено пользователем.
  • Для корректной работы приложений используйте базовое PPI операционной системы и текущее PPI или коэффициент масштабирования.

Пример кода на Object Pascal (Delphi):

const DefaultDesignTimePPI = 96; // Виртуальное PPI в Windows для стандартного масштаба шрифтов (100%)

procedure TForm1.FormCreate(Sender: TObject);
begin
  AutoScroll := False; // Отключаем автопрокрутку, чтобы можно было изменить размер формы при масштабировании
  ChangeScale(Screen.PixelsPerInch, DefaultDesignTimePPI);
  Scaled := True;
  // Дополнительные настройки, если необходимо
end;

Альтернативные действия:

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

Вывод:

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

Комментарии пользователей и дополнительные разъяснения:

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

Заключение:

Пользователи часто сталкиваются с путаницей, связанной с разницей между реальным PPI устройства и виртуальным PPI, предоставляемым операционной системой. Это различие является частью системы виртуального масштабирования, которая позволяет пользователям адаптировать интерфейс под свои нужды. Разработчикам следует принимать во внимание эти особенности при разработке кросс-платформенных приложений и использовать предоставляемые операционной системой значения для корректного масштабирования элементов интерфейса.

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

Контекст вопроса связан с несоответствием реального значения PPI (точек на дюйм) экрана, полученного при разработке в Delphi 10.3 Rio, и того значения, которое система возвращает через свойство Screen.PixelsPerInch, что может быть вызвано настройками мас


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

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




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


:: Главная :: Монитор и Экран ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-13 23:26:13/0.0039148330688477/0