Информация об изменениях

Сообщение Re[2]: Hi-DPI боль или дополнение к вопросу про тестирование от 12.01.2019 15:13

Изменено 22.04.2019 8:15 deleted2

Re[2]: Hi-DPI боль или дополнение к вопросу про тестирование
Здравствуйте, /aka/, Вы писали:

A>Здравствуйте, rean, Вы писали:


R>>Я купил себе 4K Hi-DPI монитор и использую вместе с двумя другими не Hi-DPI мониторами.

...
A>Я купил себе 43" 4K монитор чтобы тестировать софт, но никаких багов не увидел

Поперемещайте окна между двумя мониторами с разными DPI.
Если монитор только один, то с этой ситуацией справляется дефолтный способ расчета DPI, который еще с XP работает.
Тут возможны баги с текстом. При изменении DPI размер текста меняется не пропорционально.

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

Приложение должно ловить сообщение WM_DPICHANGED и иметь корректный манифест:
https://docs.microsoft.com/en-us/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows
Проблема в том, что в зависимости от того, как где что рисуется, нужно адаптировать код, чтобы правильно все рисовать,
инициализировать ресурсы рисования и пересоздавать их с учетом изменения размеров.

Все усложняется тем, что в разных версиях Windows это реализовано по-разному. Сообщение посылается по-разному и в разные окна.
А если приложение не поддерживает все это, то винда начнет сама адаптировать, руководствуясь своими соображениями, что приводит к
визуальным глюкам.

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

Отрисовка иконок (не битмапов) через Win32 так вообще в этом отношении глючная.

Если в вашем коде рисуется что-то вручную, то изменение DPI должно приводить к изменению везде, даже в коде, который
инициализировался только один раз. Что-то забыли или инициализировали так, и все — привет баг!
Инициализацию так вообще придется делать совсем иначе — нужно уметь переинициализовывать все ресурсы на-лету!

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

Потому что для неадаптированных программ к multi-monitor DPI
наблюдаются визуальные глюки, которые фиксятся только рестартом приложений! Может легко и повиснуть программа в самый неожиданный момент.
Также в винде есть несколько мест, когда окошки показываются с зумом 1:1.
Re[2]: Hi-DPI боль или дополнение к вопросу про тестирование
Удаляю