Difference between revisions of "High DPI/ru"

From Free Pascal wiki
Jump to navigationJump to search
Line 117: Line 117:
 
Вывод из этого заключается в том, что можно избежать несогласованности в отображении, установив размеры шрифта. Но мы не принимаем во внимание, что графические элементы могут быть меньше в соответствии с фактическим DPI экрана. Благодаря поддержке DPI можно заставить приложение вести себя так, как будто оно знает реальный размер пикселей.
 
Вывод из этого заключается в том, что можно избежать несогласованности в отображении, установив размеры шрифта. Но мы не принимаем во внимание, что графические элементы могут быть меньше в соответствии с фактическим DPI экрана. Благодаря поддержке DPI можно заставить приложение вести себя так, как будто оно знает реальный размер пикселей.
  
=== DPI Aware Application (For Vista +) ===
+
=== Приложения с поддержкой DPI (для Vista +) ===
  
[http://sourceforge.net/projects/cpicksniff2/ CPickSniff] is an application to capture screen colors. We will use it as an example to see how High DPI works in Windows.
+
[http://sourceforge.net/projects/cpicksniff2/ CPickSniff] это приложение для захвата цвета экрана. Мы будем использовать его в качестве примера, чтобы увидеть, как работает High DPI в Windows.
  
'''Default DPI'''
 
  
This is the app running at 96 DPI (100%). It's the default mode, when scaling isn't necessary.
+
'''DPI по умолчанию'''
 +
 
 +
Это приложение запущено на 96 DPI (100%). Это режим по умолчанию, когда масштабирование не требуется.
  
 
[[Image:cpicksniff_defaultdpi.png]]
 
[[Image:cpicksniff_defaultdpi.png]]
  
'''Windows DPI Scaling'''
 
  
This is the same app running at 144 DPI (150%) without a manifest, so Windows scales it like a bitmap. The result is a blurred image.
+
'''Масштабирование DPI Windows'''
 +
 
 +
Это то же самое приложение, запущенное под 144 DPI (150%) без манифеста, поэтому Windows масштабирует его как растровое изображение. В результате получается размытое изображение.
  
 
[[Image:cpicksniff_blured.png]]
 
[[Image:cpicksniff_blured.png]]
  
'''With Manifest'''
 
  
Running at 144 DPI (150%). This time the app includes a manifest but the application contains no code to handle scaling. Items aren't scaled whereas fonts are scaled (Windows does this automatically), so text is clipped.
+
'''С манифестом'''
 +
 
 +
Запущено под 144 DPI (150%). На этот раз приложение содержит манифест, но приложение не содержит кода для обработки масштабирования. Элементы не масштабируются, тогда как шрифты масштабируются (Windows делает это автоматически), поэтому текст обрезается.
  
 
[[Image:cpicksniff_nohighdpi.png]]
 
[[Image:cpicksniff_nohighdpi.png]]
 +
  
 
'''High DPI'''
 
'''High DPI'''
  
Finally with both a manifest and a LCL scaling, the app is in High DPI.
+
Наконец, с манифестом и масштабированием LCL, приложение находится в высоком разрешении(High DPI).
  
 
[[Image:cpicksniff_highdpi.png]]
 
[[Image:cpicksniff_highdpi.png]]

Revision as of 23:18, 4 February 2019

Deutsch (de) English (en) español (es) русский (ru)

Вступление

DPI (Dots Per Inch) - это соотношение между размером в пикселях и фактическим размером дисплея. Здесь точка является эквивалентом пикселя в терминологии печати. Приложения могут либо использовать размеры в пикселях, либо учитывать фактический размер дисплея. Во втором случае размеры указаны в пунктах.

Большинство современных операционных систем используют значение DPI по умолчанию, установленное в 96, и позволяют вручную изменить его на более высокое значение. Физический DPI можно определить по отображению через протокол EDID по данным физического размера и фактического разрешения. Но физический DPI не используется системой автоматически, поэтому, если вы подключите видеовыход к монитору с другим размером, то разрешение экрана и визуальный размер элементов управления не изменятся автоматически.

Обычно DPI представляется как одно значение, но оно может отличаться для горизонтальной и вертикальной осей, если пиксель не квадратный.

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

Свойства Lazarus, ссылающиеся на DPI


Пиксели и точки

Например, 300 DPI означает, что на дюйм приходится 300 пикселей (или точек). Есть 72 точки на дюйм, так что:

300 пикселей ↔ 1 дюйм

300/72 пикселей ↔ 1 точка

4,16 пикселей ↔ 1 точка

Теперь с 96 DPI:

96 пикселей ↔ 1 дюйм

1,33 пикселя ↔ 1 дюйм

Теперь с 144 DPI:

144 пикселя ↔ 1 дюйм

2 пикселя ↔ 1 точка

Настройка High DPI

Windows

В Windows 95 и более поздних версиях можно изменить соотношение DPI, чтобы увеличить размер элементов. Высокий DPI означает любую пользовательскую настройку DPI с более чем 96 DPI (настройка по умолчанию) (ссылка).

Высокая осведомленность о DPI означает, что приложение учитывает этот параметр DPI.

Windows Vista и Windows 7

В Windows 7 перейдите в «Панель управления > Все элементы управления > Экран».

Выберите Мелкий 100% (по умолчанию), Средний 125% или Крупный 150%. Если вы выбираете 100% (96 DPI), это значение по умолчанию для Windows DPI (High DPI не используется по умолчанию).

Если вы выбрали 125% (120 DPI), опция «Использовать масштабирование DPI в стиле Windows XP» будет включена. Приложения, которые вы запускаете под этим параметром, масштабируются так, как будто они работают под Windows XP.

Если вы выберете 150% (144 DPI), опция «Использовать масштабирование DPI в стиле Windows XP» будет отключена (виртуализация DPI включена), и приложения, которые вы запускаете с этим параметром, должны иметь High DPI Awareness, чтобы предотвратить масштабирование системы, которое приведет к размытию изображения.

Вы также можете установить свои собственные настройки DPI с помощью параметра "Set custom text size (DPI)"(Установить собственный размер текста (DPI)) и включить/отключить виртуализацию DPI.

Windows 8 Metro приложения

Для Windows 8 Metro приложения читайте это.

Windows 10

В Windows 10 «Панель управления > Оформление и персонализация > Экран» имеет больше параметров. У вас могут быть разные размеры шрифта для каждого элемента: заголовок, меню, диалоговое окно и т.д. Убедитесь, что вы протестировали дважды для проверки, все ли работает под разными размерами.

Теперь [все] основана на размере шрифта, а не DPI. Параметр DPI [использовать] не рекомендуется, но все же [он] есть. Таким образом, вместо изменения размера всех элементов на рабочем столе, это изменит только размер шрифта (и, конечно, все остальное будет изменено для соответствия).

Помните, что под Windows 10 есть универсальные приложения (WinRT) и классические настольные приложения (Win32). Мы говорим здесь о настольных приложениях.

Linux

В Linux настройка DPI является более сложной и зависит от используемого программного обеспечения и его версии.

Вы можете узнать текущее разрешение монитора с помощью команды:

xdpyinfo|grep dots

Вы можете изменить DPI на новое значение командой:

xrandr --dpi 144x144

Чтобы сохранить настройки после перезагрузки, вам нужно добавить команду как скрипт в /etc/X11/Xsession.d/77set_dpi.

Дополнительная информация:

Примеры

Фиксированные размеры шрифта (не HighDPI)

Вот форма с неопределенным размером шрифта (установленным в ноль, который является значением по умолчанию). Он был разработан с разрешением 96 точек на дюйм (100%) и выглядит следующим образом:

Testdpi100.png

Теперь при 120 DPI (125%) он становится:

Testdpi125.png

Как видите, шрифт становится больше, поэтому текст обрезается. Заголовок окна становится больше, но клиентская область окна остается того же размера. Обратите внимание, что эти изменения в размере могут происходить при использовании приложения с другой темой Windows или с другой операционной системой.

Чтобы избежать этого, вы должны установить НЕнулевое значение размера шрифта. Обратите внимание, что Font.Size выражается в точках, а Font.Height выражается в пикселях. Фактически, сохраняется только значение Font.Height, а Font.Size изменяется в соответствии с текущим значением DPI. Поэтому, если мы установим размер шрифта, он будет зафиксирован до определенного размера в пикселях.

Если мы попробуем еще раз с фиксированным размером шрифта 9 точек, то при 96 DPI (100%) мы получим это:

Testdpi100fixedM12P9.png

Теперь, если та же самая программа работает с разрешением 120 точек на дюйм (125%), она становится:

Testdpi125fixedM12P9.png

Результат практически одинаков. Строка заголовка больше, но клиентская область и размер шрифта одинаковы. Обратите внимание, что на самом деле размер шрифта в точках изменился.

Вывод из этого заключается в том, что можно избежать несогласованности в отображении, установив размеры шрифта. Но мы не принимаем во внимание, что графические элементы могут быть меньше в соответствии с фактическим DPI экрана. Благодаря поддержке DPI можно заставить приложение вести себя так, как будто оно знает реальный размер пикселей.

Приложения с поддержкой DPI (для Vista +)

CPickSniff это приложение для захвата цвета экрана. Мы будем использовать его в качестве примера, чтобы увидеть, как работает High DPI в Windows.


DPI по умолчанию

Это приложение запущено на 96 DPI (100%). Это режим по умолчанию, когда масштабирование не требуется.

cpicksniff defaultdpi.png


Масштабирование DPI Windows

Это то же самое приложение, запущенное под 144 DPI (150%) без манифеста, поэтому Windows масштабирует его как растровое изображение. В результате получается размытое изображение.

cpicksniff blured.png


С манифестом

Запущено под 144 DPI (150%). На этот раз приложение содержит манифест, но приложение не содержит кода для обработки масштабирования. Элементы не масштабируются, тогда как шрифты масштабируются (Windows делает это автоматически), поэтому текст обрезается.

cpicksniff nohighdpi.png


High DPI

Наконец, с манифестом и масштабированием LCL, приложение находится в высоком разрешении(High DPI).

cpicksniff highdpi.png

High DPI in Lazarus 1.8 and above

To handle High DPI using new features in 1.8, follow these steps:

  • On Windows: enable DPI awareness in Project Options -> Application. Decide if you want to support per monitor DPI awareness or not.
  • Enable LCL scaling for your application DPI awareness in Project Options -> Application -> "Use LCL scaling (Hi-DPI).
  • Set TForm.Scaled=True for all your forms (it is the default value). All WYSIWYG should work automatically. Also the designer scales the forms accordingly.
  • If you create controls run-time, scale all coordinates, sizes etc that have to be DPI-aware with TControl.Scale96ToForm() or ScaleDesignToForm() (depending on your choice of default PPI) or prepare your container (e.g. panel with controls) as it was with 96 PPI and then call TControl.AutoAdjustLayout(lapAutoAdjustForDPI, 96, ParentFormOfTheContainer.PixelsPerInch, 0, 0);
  • If some of your components don't scale their inner sizes, override DoAutoAdjustLayout and scale the sizes (see TToolBar) - it has to be done for all controls. If a LCL control misses DoAutoAdjustLayout please report to mantis and provide a patch if you can.

Lazarus IDE high DPI

The Lazarus IDE is DPI-aware itself.

High DPI in older Lazarus

Is not as nice as 1.8 but it works, call on each form OnCreate event:

Self.AutoAdjustLayout(lapAutoAdjustForDPI, 96, Screen.PixelsPerInch, Self.Width, ScaleX(Self.Width, 96));

External Links