У меня проблема с тем, что приложение (написанное на Delphi) ведет себя правильно при настройках 96 DPI по умолчанию во всех системах, но работает некорректно при настройке «150% размера текста» (внутренне 144 dpi) в разных системах.Кажется, что в некоторых системах определенные части текста / шрифта моего приложения растягиваются, а в других - нет.Я бы подумал, что мое приложение в определенной версии Windows (Win7) с определенным DPI должно вести себя так же.
Либо мое приложение сообщит Windows, что оно не нужнофункция виртуализации DPI или нет.Это я понимаю.Что я не понимаю, так это то, как изменения DPI могут вызывать различный внешний вид на двух компьютерах, работающих под управлением Windows 7, с разрешением 144 т / д, отображающих одинаковые шрифты и формы с одинаковыми фиксированными размерами.
Есть ли какая-то конфигурация-зависимые элементы, участвующие в виртуализации DPI, которые мне нужно проверить в Windows (реестр и т. д.)?В противном случае, как устранить неполадки и узнать, выполняется ли виртуализация DPI на вашем клиентском окне?
В Delphi необходимо установить для свойства TForm.Scaled значение false, если не требуется масштабирование.Но что я не понимаю, так это то, что когда свойство Scaled главной формы имеет значение true, я не всегда могу предсказать результат.
Что меня больше всего беспокоит в моем приложении, так это то, что у меня есть элемент управления, который ведет себя только неправильнов моем большом реальном приложении, но которое не ведет себя неправильно в автономном приложении, где я пытаюсь отладить только элемент управления.Чтобы понять поведение управления в отдельном приложении, я был вынужден создать демонстрационное приложение, в котором я включаю осведомленность о DPI через файл манифеста.Затем я могу воспроизвести глюк управляющего чертежа, хотя и в другой форме.
Вот файл манифеста, который я использую в своем демонстрационном приложении, который выявляет проблемы, с которыми сталкиваются мои элементы управления при работе с настройками с высоким разрешением в окнах,Однако одна странная вещь, которую я обнаружил, заключается в том, что это возможно для приложения
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<assemblyIdentity version="14.0.3615.26342" processorArchitecture="*"
name="TestProject" type="win32"></assemblyIdentity>
<description>High DPI Controls Test App</description>
</assembly>
. Вот пример одного из примерно 30 мест, где элементы управления в моем приложении испорчены, когда я отключаю виртуализацию DPI в моемприложение.Этот конкретный глюк был решен путем отключения свойства Scaled в моей форме.Но в других местах наличие TForm.Scaled = false вызывает проблему, тогда как в некоторых формах она исправляет ее:
Обновление: оказывается, что некоторые из моих элементов управления используютGDI + и то, что поведение шрифта в контекстах GDI + отличается от поведения шрифта в обычных контекстах GDI, по крайней мере для некоторых сторонних элементов управления, которые используют GDI +.Это основной источник головной боли.Во-вторых, в VCL имеется покрытие для пятнистых тестов и плохо определенные требования к осведомленности о DPI.Некоторые элементы управления VCL основаны на общих элементах управления MS, и хотя справедливо сказать, что базовые общие элементы управления, вероятно, прекрасно работают в ситуациях с высоким разрешением, не все гарантии могут гарантировать правильную работу всех оболочек элементов управления VCL.Итак, проверка приложения на предмет высокой осведомленности о DPI во всех его элементах управления, а также правильное поведение во всех доступных темах Windows 7:
- с включенным аэро-стеклом и разрешением 96 точек на дюйм (по умолчанию Win7 отображается на большинстве современныхаппаратное обеспечение)
- базовая тема (отключено Aero Glass), но включены темы xp
- классический вид win2000 при выключенном стекле, а также темы уровня xp,
- высокая контрастность белого
- высококонтрастный черный
- Различные настройки, отличные от 96-DPI
.. и этот список можно продолжить, и у вас довольно тяжелое бремя, так какразработчик приложений.Независимо от того, являетесь ли вы пользователем Delphi и используете VCL, или вы являетесь разработчиком MFC / ATL C ++, мне кажется, что поддержка всех различных причудливых режимов Windows - это бремя, которое слишком тяжело переносить.Так что большинство людей не беспокоятся.Я прав?