Sign in Join
Wiki copytemporary

High DPI/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: High DPI/ru

OldNewLine
1+## Вступление
2+
3+DPI (Dots Per Inch) - это соотношение между размером в пикселях и фактическим размером дисплея. Здесь точка является эквивалентом пикселя в терминологии печати. Приложения могут либо использовать размеры в пикселях, либо учитывать фактический размер дисплея. Во втором случае размеры указаны в пунктах.
4+
5+Большинство современных операционных систем используют значение DPI по умолчанию, установленное в 96, и позволяют вручную изменить его на более высокое значение. Физический DPI можно определить по отображению через протокол [EDID](http://ru.wikipedia.org/wiki/Extended_display_identification_data) по данным физического размера и фактического разрешения. Но физический DPI не используется системой автоматически, поэтому, если вы подключите видеовыход к монитору с другим размером, то разрешение экрана и визуальный размер элементов управления не изменятся автоматически.
6+
7+Обычно DPI представляется как одно значение, но оно может отличаться для горизонтальной и вертикальной осей, если пиксель не квадратный.
8+
9+В дополнение к базовому пониманию DPI приложения вы можете добавить в приложение собственные параметры DPI, чтобы пользователи могли настраивать DPI для каждого приложения, чтобы избежать неправильной настройки DPI системы.
10+
11+### Свойства Lazarus, ссылающиеся на DPI
12+
13+- Graphics.ScreenInfo.PixelsPerInchX
14+- Graphics.ScreenInfo.PixelsPerInchY
15+- Forms.Screen.PixelsPerInch
16+- Forms.TForm.DesignTimePPI (См.: [[Autosize / Layout/ru|Автоматическая настройка DPI]])
17+
18+### Пиксели и точки
19+
20+Например, **300 DPI** означает, что на дюйм приходится 300 пикселей (или точек). Есть 72 точки на дюйм, так что:
21+
22+300 пикселей ↔ 1 дюйм
23+
24+300/72 пикселей ↔ 1 точка
25+
26+4,16 пикселей ↔ 1 точка
27+
28+**Теперь с 96 DPI:**
29+
30+96 пикселей ↔ 1 дюйм
31+
32+1,33 пикселя ↔ 1 точка
33+
34+**Теперь с 144 DPI:**
35+
36+144 пикселя ↔ 1 дюйм
37+
38+2 пикселя ↔ 1 точка
39+
40+## Настройка High DPI
41+
42+### Windows
43+
44+В Windows 95 и более поздних версиях можно изменить соотношение DPI, чтобы увеличить размер элементов. Высокий DPI означает любую пользовательскую настройку DPI с более чем 96 DPI (настройка по умолчанию) ([ссылка](https://docs.microsoft.com/en-us/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows)).
45+
46+Высокая осведомленность о DPI означает, что приложение учитывает этот параметр DPI.
47+
48+#### Windows Vista и Windows 7
49+
50+В Windows 7 перейдите в «Панель управления \> Все элементы управления \> Экран».
51+
52+Выберите Мелкий 100% (по умолчанию), Средний 125% или Крупный 150%. Если вы выбираете 100% (96 DPI), это значение по умолчанию для Windows DPI (High DPI не используется по умолчанию).
53+
54+Если вы выбрали 125% (120 DPI), опция «Использовать масштабирование DPI в стиле Windows XP» будет включена. Приложения, которые вы запускаете под этим параметром, масштабируются так, как будто они работают под Windows XP.
55+
56+Если вы выберете 150% (144 DPI), опция «Использовать масштабирование DPI в стиле Windows XP» будет отключена (виртуализация DPI включена), и приложения, которые вы запускаете с этим параметром, должны иметь High DPI Awareness, чтобы предотвратить масштабирование системы, которое приведет к размытию изображения.
57+
58+Вы также можете установить свои собственные настройки DPI с помощью параметра "Set custom text size (DPI)"(Установить собственный размер текста (DPI)) и включить/отключить виртуализацию DPI.
59+
60+#### Windows 8 Metro приложения
61+
62+Для Windows 8 Metro приложения читайте [это](http://blogs.msdn.com/b/b8/archive/2012/03/21/scaling-to-different-screens.aspx).
63+
64+#### Windows 10
65+
66+В Windows 10 «Панель управления \> Оформление и персонализация \> Экран» имеет больше параметров. У вас могут быть разные размеры шрифта для каждого элемента: заголовок, меню, диалоговое окно и т.д. Убедитесь, что вы протестировали дважды для проверки, все ли работает под разными размерами.
67+
68+Теперь \[все\] основана на размере шрифта, а не DPI. Параметр DPI \[использовать\] не рекомендуется, но все же \[он\] есть. Таким образом, вместо изменения размера всех элементов на рабочем столе, это изменит только размер шрифта (и, конечно, все остальное будет изменено для соответствия).
69+
70+Помните, что под Windows 10 есть универсальные приложения (WinRT) и классические настольные приложения (Win32). Мы говорим здесь о настольных приложениях.
71+
72+### Linux
73+
74+В Linux настройка DPI является более сложной и зависит от используемого программного обеспечения и его версии.
75+
76+Вы можете узнать текущее разрешение монитора с помощью команды:
77+
78+``` bash
79+xdpyinfo|grep dots
80+```
81+
82+Вы можете изменить DPI на новое значение командой:
83+
84+``` bash
85+xrandr --dpi 144x144
86+```
87+
88+Чтобы сохранить настройки после перезагрузки, вам нужно добавить команду как скрипт в /etc/X11/Xsession.d/77set_dpi.
89+
90+Дополнительная информация:
91+
92+- [Как найти и изменить DPI экрана?](http://askubuntu.com/questions/197828/how-to-find-and-change-the-screen-dpi) (англ.)
93+- [Размер экрана и DPI](https://wiki.archlinux.org/index.php/xorg#Display_size_and_DPI) (англ.)
94+- [Изменение фиксированных 96dpi на Ubuntu с ЖК-дисплеем с высоким DPI](https://help.ubuntu.com/community/AsusZenbook#LCD) (англ.)
95+
96+## Примеры
97+
98+### Фиксированные размеры шрифта (не HighDPI)
99+
100+Вот форма с неопределенным размером шрифта (установленным в ноль, который является значением по умолчанию). Он был разработан с разрешением 96 точек на дюйм (100%) и выглядит следующим образом:
101+
102+<figure>
103+<img src="Testdpi100.png" title="Testdpi100.png" />
104+<figcaption>Testdpi100.png</figcaption>
105+</figure>
106+
107+Теперь при 120 DPI (125%) он становится:
108+
109+<figure>
110+<img src="Testdpi125.png" title="Testdpi125.png" />
111+<figcaption>Testdpi125.png</figcaption>
112+</figure>
113+
114+Как видите, шрифт становится больше, поэтому текст обрезается. Заголовок окна становится больше, но клиентская область окна остается того же размера. Обратите внимание, что эти изменения в размере могут происходить при использовании приложения с другой темой Windows или с другой операционной системой.
115+
116+Чтобы избежать этого, вы должны установить **НЕ**нулевое значение размера шрифта. Обратите внимание, что `Font.Size` выражается в точках, а `Font.Height` выражается в пикселях. Фактически, сохраняется только значение `Font.Height`, а `Font.Size` изменяется в соответствии с текущим значением DPI. Поэтому, если мы установим размер шрифта, он будет зафиксирован до определенного размера в пикселях.
117+
118+Если мы попробуем еще раз с фиксированным размером шрифта 9 точек, то при 96 DPI (100%) мы получим это:
119+
120+<figure>
121+<img src="Testdpi100fixedM12P9.png" title="Testdpi100fixedM12P9.png" />
122+<figcaption>Testdpi100fixedM12P9.png</figcaption>
123+</figure>
124+
125+Теперь, если та же самая программа работает с разрешением 120 точек на дюйм (125%), она становится:
126+
127+<figure>
128+<img src="Testdpi125fixedM12P9.png" title="Testdpi125fixedM12P9.png" />
129+<figcaption>Testdpi125fixedM12P9.png</figcaption>
130+</figure>
131+
132+Результат практически одинаков. Строка заголовка больше, но клиентская область и размер шрифта одинаковы. Обратите внимание, что на самом деле размер шрифта в точках изменился.
133+
134+Вывод из этого заключается в том, что можно избежать несогласованности в отображении, установив размеры шрифта. Но мы не принимаем во внимание, что графические элементы могут быть меньше в соответствии с фактическим DPI экрана. Благодаря поддержке DPI можно заставить приложение вести себя так, как будто оно знает реальный размер пикселей.
135+
136+### Приложения с поддержкой DPI (для Vista +)
137+
138+[CPickSniff](http://sourceforge.net/projects/cpicksniff2/) это приложение для захвата цвета экрана. Мы будем использовать его в качестве примера, чтобы увидеть, как работает High DPI в Windows.
139+
140+**DPI по умолчанию**
141+
142+Это приложение запущено на 96 DPI (100%). Это режим по умолчанию, когда масштабирование не требуется.
143+
144+<figure>
145+<img src="cpicksniff_defaultdpi.png" title="cpicksniff_defaultdpi.png" />
146+<figcaption>cpicksniff_defaultdpi.png</figcaption>
147+</figure>
148+
149+**Масштабирование DPI Windows**
150+
151+Это то же самое приложение, запущенное под 144 DPI (150%) без манифеста, поэтому Windows масштабирует его как растровое изображение. В результате получается размытое изображение.
152+
153+<figure>
154+<img src="cpicksniff_blured.png" title="cpicksniff_blured.png" />
155+<figcaption>cpicksniff_blured.png</figcaption>
156+</figure>
157+
158+**С манифестом**
159+
160+Запущено под 144 DPI (150%). На этот раз приложение содержит манифест, но приложение не содержит кода для обработки масштабирования. Элементы не масштабируются, тогда как шрифты масштабируются (Windows делает это автоматически), поэтому текст обрезается.
161+
162+<figure>
163+<img src="cpicksniff_nohighdpi.png" title="cpicksniff_nohighdpi.png" />
164+<figcaption>cpicksniff_nohighdpi.png</figcaption>
165+</figure>
166+
167+**High DPI**
168+
169+Наконец, с манифестом и масштабированием LCL, приложение находится в высоком разрешении(High DPI).
170+
171+<figure>
172+<img src="cpicksniff_highdpi.png" title="cpicksniff_highdpi.png" />
173+<figcaption>cpicksniff_highdpi.png</figcaption>
174+</figure>
175+
176+## High DPI в Lazarus 1.8 и выше
177+
178+Для обработки High DPI с использованием новых функций в 1.8, выполните следующие действия:
179+
180+- На Windows: включите поддержку DPI в разделе Project Options(Параметры проекта) -\> Application (Приложение). Определитесь, хотите ли вы поддерживать DPI каждого монитора или нет.
181+- Включите масштабирование LCL для поддержки DPI вашей программы в Project Options(Параметры проекта) -\> Application(Приложение) -\> Use LCL scaling (Hi-DPI) (Использовать масштабирование LCL (Hi-DPI)).
182+- Установите `TForm.Scaled=True` для всех ваших форм (это будет значение по умолчанию). Все WYSIWYG-эффекты должны работать автоматически. Также дизайнер соответственно масштабирует формы.
183+- Если вы создаете элементы управления во время выполнения, отмасштабируйте все координаты, размеры и т.д., которые должны учитывать DPI, с помощью `TControl.Scale96ToForm()` или `ScaleDesignToForm()` (в зависимости от выбранного вами PPI по умолчанию) или подготовьте свой контейнер (например, панель с элементами управления) как это было с 96 PPI, а затем вызовите `TControl.AutoAdjustLayout(lapAutoAdjustForDPI, 96, ParentFormOfTheContainer.PixelsPerInch, 0, 0)`;
184+- Если некоторые из ваших компонентов не масштабируют свои внутренние размеры, переопределите `DoAutoAdjustLayout` и отмасштабируйте размеры (см. TToolBar) - это должно быть сделано для всех элементов управления. Если элемент управления LCL пропускает `DoAutoAdjustLayout`, сообщите об этом в mantis(багтрекер) и предоставьте исправление, если можете.
185+
186+### Lazarus IDE high DPI
187+
188+Среда Lazarus IDE поддерживает DPI.
189+
190+## High DPI в старых версиях Lazarus
191+
192+\[Поддержка High DPI работает\] не так хорошо, как в 1.8, но \[она все-таки\] работает, вызывайте при каждом событии OnCreate формы:
193+
194+Self.AutoAdjustLayout(lapAutoAdjustForDPI, 96, Screen.PixelsPerInch, Self.Width, ScaleX(Self.Width, 96));
195+
196+## Внешние ссылки
197+
198+- \[<http://msdn.microsoft.com/en-us/library/dd464646(v=VS.85>).aspx High DPI (Windows)\] MSDN article about High DPI
199+- [Guidelines for scaling](http://msdn.microsoft.com/en-us/library/windows/apps/hh465362) Windows Dev Center - User experience guidelines for scaling Metro style apps
200+- [[Windows Icon]] How to create icons that work with High DPI.
201+
202+---
203+*From the Free Pascal wiki, page "High DPI/ru", as it stood on 2022-06-22 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history