Comments 45
На этом фоне «порадовал» последний инсталлятор скайпа, у которого флажок «Intall Bing» прятался за картинкой, при этом был по умолчанию установлен. Надеюсь, тем кто не тестит инсталляторы, уготован отдельный пентиум-2 в аду.
Вы уверены, что это ошибка?
Есть, кстати, неплохая программа Unchecky. Сидит в процессах и отжимает галочки по установке тулбаров, поисковых движков и т.д. Ставлю всем, кому приходится помогать с настройкой компа — 1 мб оперативки того стоит — никакого побочного хлама больше не устанавливается.
В случае со скайпом — особенно актуально.
В случае со скайпом — особенно актуально.
Слово «скалирование» вижу в первый раз.
Английское обычно записывается «без модификаций» — «скейлинг»
Английское обычно записывается «без модификаций» — «скейлинг»
судя по опросу «скалирование» действительно не пользуется популярностью. Видать это и впрямь не русский язык :) Хотя в гугле это слово встречается. Вот бы была возможность привязывать голоса в опросе к данным из профиля — можно бы было посмотреть на корреляцию с географическим положением или профессией…
Слово «скейлинг» я бы и не понял, если б не контекст статьи, а «скалирование» — нормально и сразу понятно, о чём речь.
«Масштабирование» — сначала подумал, что это zoom, как в браузере, когда крутишь колёсико мыши с зажатым шифтом, и удивился, что в виндовс такая полезная фича есть и для сторонних программ.
«Масштабирование» — сначала подумал, что это zoom, как в браузере, когда крутишь колёсико мыши с зажатым шифтом, и удивился, что в виндовс такая полезная фича есть и для сторонних программ.
Стоит отметить, что лучше редактировать поставляющийся с приложением манифест, а не полностью заменять на свой. Плюс это ломает цифровую подпись, её тогда тоже лучше вырезать, проверив перед этим.
Есть ещё четвёртый тип программ:
4. программа говорит Windows, что умеет масштабироваться (в результате операционная система послушно отключает DPI-виртуализацию, выглядящую как увеличение с размытием), но ленивые / наивные программисты на самом деле не добавляют в программу вообще никакого кода для осуществления правильного масштабирования средствами самой программы — просто добавить в манифест флаг
В результате наблюдаем окна, элементы интерфейса и текст, мелкие вплоть до невозможности чтения и работы с программой. К этой категории относятся, например, антивирус ESET NOD32 и панель управления ESI Juli@.
4. программа говорит Windows, что умеет масштабироваться (в результате операционная система послушно отключает DPI-виртуализацию, выглядящую как увеличение с размытием), но ленивые / наивные программисты на самом деле не добавляют в программу вообще никакого кода для осуществления правильного масштабирования средствами самой программы — просто добавить в манифест флаг
dpiAware=true
(сюрприз!) недостаточно.В результате наблюдаем окна, элементы интерфейса и текст, мелкие вплоть до невозможности чтения и работы с программой. К этой категории относятся, например, антивирус ESET NOD32 и панель управления ESI Juli@.
Это второй тип.
Второй тип — это когда некоторые элементы всё-таки масштабируются. А четвёртый — это когда масштабирования вообще не происходит, и единственное, что предпринял умница-автор программы — отключил DPI-виртуализацию.
Если просто взять, и отключить DPI-виртуализацию, то начинают масштабироваться системные или фреймворковые элементы управления (тайтл бары, кнопки, менюшки и т.д.), т.е. приложение переходит во вторую группу. От этого как раз страдает абсолютное большинство Qt приложений, как в топике.
А если не придираться к формулировкам, то эффект одинаковый — пользоваться приложением очень сложно, а переключить штатными средствами в адекватный режим нельзя.
А если не придираться к формулировкам, то эффект одинаковый — пользоваться приложением очень сложно, а переключить штатными средствами в адекватный режим нельзя.
Автомасштабирование кнопок при отключённой DPI-виртуализации — это, возможно, что-то специфичное для Qt (либо, может быть, на уровне системы увеличен не масштаб, а лишь размер шрифта). Окно обычной WinAPI-программы будет целиком равномерно очень мелким вместе со всеми содержащимися в нём элементами, включая кнопки. «Обвязочные» элементы интерфейса типа заголовочной панели окна — это, пожалуй, то немногое, что система способна адекватно масштабировать самостоятельно.
Вы попросту не правы. Классические WinAPI контролы прекрасно умеют масштабироваться самостоятельно. Проблема в юзер коде, который считает координаты в других величинах. Проверьте сами: возьмите какое-нибудь древнее приложение пятнадцатилетней давности и добавьте туда манифест с
dpiAware=true
. Вы будете удивлены!возьмите какое-нибудь древнее приложение пятнадцатилетней давности и добавьте туда манифест с dpiAware=true.Ок, можете привести конкретный пример такого приложения?
Возьмите что-нибудь из Windows XP например. Paint, Minesweeper или калькулятор.
Предполагаю, такие программы на самом деле вычисляют размеры всех элементов с учётом системного значения DPI, просто не сообщают об этом системе. Я же говорил об обратной ситуации: когда программа сообщает системе, что является DPI-aware, а на самом задаёт все размеры без учёта системного значения DPI.
Строго говоря, так практически не бывает. Я думаю, вы просто не найдёте такого приложения. Неплохой попыткой мог бы быть Chrome, но его основной процесс использует
Вы задаёте слишком строгие рамки, таких приложений не существует. А всё остальное попадает под категорию 2.
В любом случае, я думаю мы друг друга поняли. Я с вами согласен насчёт таких программ, как Adobe Photoshop — ими пользоваться совершенно невозможно. :(
GetSystemMenu
, а оно скалируется от DPI.Вы задаёте слишком строгие рамки, таких приложений не существует. А всё остальное попадает под категорию 2.
В любом случае, я думаю мы друг друга поняли. Я с вами согласен насчёт таких программ, как Adobe Photoshop — ими пользоваться совершенно невозможно. :(
Я думаю, вы просто не найдёте такого приложения.Я же привёл примеры: ESET NOD32 и панель управления ESI Juli@ (см. скриншот). (Впрочем, в NOD32 окно дополнительных настроек всё-таки масштабируется, а мелкими [выводимыми пиксел в пиксел вне зависимости от DPI] являются основное окно, окно результатов сканирования и меню пиктограммы в области уведомлений.)
Кстати, в Photoshop, согласно онлайн-документации Adobe, начиная с версии CC 2014 появилась экспериментальная настройка, включающая масштаб 200% для элементов интерфейса — правда, похоже, гибкая поддержка произвольного масштаба (например, 150% или 400%) пока не предусмотрена, т. е., скажем, на 8K-дисплеях проблема снова всплывёт.
Могу сам сказать, как разработчик приложения на Winapi, что в моем приложении все прекрасно заработало после добавления манифеста, кроме самописных контролов, в которых я не учитывал DPI, а всё жестко указывал в пикселях. Больше НИКАКИХ изменений не потребовалось.
Посыпаю голову пеплом — моя вина с формулировками. Правильно было бы:
- сообщает виндовс, что умеет масштабироваться — и это правда
- сообщает виндовс, что умеет масштабироваться — но это ложь
- молчит или сообщает, что не умеет
А вы про какую Windows говорите? В Windows 8.1, появился: «Per monitor-DPI aware».
Про «DPI aware» в Windows
QTIPlot или QT это учитывают? Может в этом проблема? И на Windows < 8.1 все нормально.
Попробуйте отключить, «Per monitor-DPI aware», на Windows 8.1 это возможно.
Про «DPI aware» в Windows
QTIPlot или QT это учитывают? Может в этом проблема? И на Windows < 8.1 все нормально.
Попробуйте отключить, «Per monitor-DPI aware», на Windows 8.1 это возможно.
А вот такой вопрос — имеются 2 монитора, один 3k(2880x1620) и обычный fullhd(1920x1080). Выставляешь масштабирование 150% — на первом всё замечательно, а на втором — ПРОСТО ПИПЕЦ, КАКОЕ ВСЁ БОЛЬШОЕ! Выставляешь 100% — на втором всё отлично, на первом — не разглядишь. Есть ли какая-то возможность задать разное масштабирование для разных мониторов в Win 8.1 Pro?
Один из мониторов ноутбук?
Конечно, как одна из фич 8.1: Windows 8.1 DPI Scaling Enhancements. Конкретно вас интересует одна галочка «Let me choose one scaling level for all my displays» (извините, я не знаю, как локализовали на русский), её нужно снять, и вы сможете выбрать разное масштабирование для разных мониторов.
Пипец, и как это в своем коде поддерживать?
Мало того, что нужно учитывать разный DPI, так еще у разных мониторов может быть разный DPI?
То есть если окно программы перенесли на другой экран, она должна всё перемасштабировать?
Мало того, что нужно учитывать разный DPI, так еще у разных мониторов может быть разный DPI?
То есть если окно программы перенесли на другой экран, она должна всё перемасштабировать?
Перенести — фигня. Вот если разместить окно так, чтобы на каждом из мониторов было по половине окна…
Да ладно, не так уж это и сложно.
Использовать Sciter :)
Там это давно и из коробки поддерживается: www.terrainformatica.com/2014/01/sciter-on-multihead-system-running-windows-8-1-with-per-monitor-dpi-settings/
Не забывать в dip (device independent pixels) описывать размеры и будет хорошо
Там это давно и из коробки поддерживается: www.terrainformatica.com/2014/01/sciter-on-multihead-system-running-windows-8-1-with-per-monitor-dpi-settings/
Не забывать в dip (device independent pixels) описывать размеры и будет хорошо
Попробовал. Ничего не изменилось. ЧЯДНТ?
У меня три варианта:
1. этот метод не подходит для Вашей программы
2. этот метод не подходит для Вашей версии виндовс
3. вы и впрямь ЧДНТ.
Попробуйте на QTIPlot (в сети можно найти скомпилированную версию) — для нее-то должно сработать!
1. этот метод не подходит для Вашей программы
2. этот метод не подходит для Вашей версии виндовс
3. вы и впрямь ЧДНТ.
Попробуйте на QTIPlot (в сети можно найти скомпилированную версию) — для нее-то должно сработать!
Кстати, Skype от самого майкрософта до сих пор не DPI-aware. Интересно почему.
А не пробовали
Еще можно попробовать выключить масштабирование на вкладке совместимости.
applicationName.exe -platform windows:dpiawareness=0
(https://doc-snapshots.qt.io/qt5-5.4/highdpi.html)?Еще можно попробовать выключить масштабирование на вкладке совместимости.
Sign up to leave a comment.
Да здравствует мыло душистое, или как исправить неправильное масштабирование Windows программ