Как поддерживать пользовательские настройки DPI рабочего стола в приложениях Delphi 7?

У нас есть несколько устаревших приложений, написанных на Delphi 7. За прошедшие годы у нас было несколько запросов на поддержку пользовательских настроек dpi для настольных компьютеров в этих приложениях, но мы смогли увернуться от пули, пока не узнали. Ну больше не можем.

Когда пользователи устанавливают для своих рабочих столов разрешение 120 точек на дюйм, некоторые элементы управления «выпадают» из приложения или выходят за пределы видимой формы, в частности те, которые привязаны к правому краю их родителя.

Что я могу сделать, чтобы предотвратить эту проблему БЕЗ операции на открытом сердце.


person Gerhard Wessels    schedule 16.09.2009    source источник
comment
VCL просто не может сделать это без операции на открытом сердце. Лучшее решение, которое я видел до сих пор, используется в Inno Setup, в котором есть формы с Scaled, установленным на False, но используются пользовательские функции масштабирования для форм во время выполнения. Это делает программы установки, созданные IS, довольно хорошими при более высоких настройках DPI.   -  person mghie    schedule 16.09.2009


Ответы (1)


Как вы, наверное, знаете, это известная проблема с формами и взаимодействиями Delphi. с системными размерами шрифта.

Поведение формы Delphi по умолчанию заключается в попытке масштабирования в соответствии с пользовательской средой рабочего стола (во время выполнения). Однако, как вы обнаружили, это может иметь непреднамеренные и нежелательные побочные эффекты.

Но для свойства Scaled (по умолчанию TRUE) можно установить FALSE, чтобы предотвратить это, но я рекомендую вам прочитать первую статью, а также рассмотреть информацию в этой статье, чтобы определить, является ли это правильным решением в вашем случае.

Если вам повезет, просто установив для Scaled значение FALSE во всех ваших формах, вы сможете добиться успеха, если не полностью (что может быть утомительно, но не совсем операция на открытом сердце).

person Deltics    schedule 16.09.2009
comment
Ах, вы опередили меня на несколько секунд, и ваш ответ лучше/полнее. Я удалю свой аналогичный ответ. :-) - person robsoft; 16.09.2009
comment
-1 для подсказки, чтобы даже подумать о том, чтобы просто установить Scaled на False. Это можно сделать, но только с полным изменением размера и положения всех элементов управления во время выполнения. Предпочтительно после установки правильного системного шрифта (определяемого во время выполнения) для каждой формы. Никакое масштабирование или изменение размера во время выполнения — это просто жестокость по отношению к людям с ослабленным зрением и/или экранами с высоким DPI. - person mghie; 16.09.2009