Неправильные элементы автоматического масштабирования с привязками на PageControl в форме VCL

У меня проблемы с автоматическим масштабированием элементов управления в моей форме для различных настроек DPI монитора. Rad Studio 10.2 Токио. "Enable high-dpi" включено. Я установил PixelsPerInch формы на 96 во время разработки. Я поместил TPageControl в форму, создал на ней страницу TTabSheet, поместил некоторые элементы управления на страницу и установил для их свойства Anchor значение akRight (в дополнение к akLeft и akTop). Когда программа запускается на мониторе с разрешением 120 точек на дюйм, правый край этих элементов управления выходит за пределы правой границы PageControl, поэтому правые части элементов управления не видны. Если я выключу akRight, то элементы управления масштабируются правильно. Но мне нужны эти якоря, чтобы правильно изменить размер формы во время выполнения. Как решить проблему?

2 ответа

Справка C++ Builder для TFont гласит:

Свойство PixelsPerInch влияет только на шрифты принтера и не должно изменяться.

Чтобы изменить размер шрифта, используйте свойства "Размер" или "Высота".

Я столкнулся с той же проблемой с приложением, владеющим множеством TPageControl с TEdit, TMemo и другими смещенными элементами управления в режиме с высоким разрешением.

Моим первым подходом к решению этой проблемы была попытка передать TForm в процедуру, называемую FixFormScaling(), где я собирался исправить все ошибки масштабирования. Но я сильно потерпел неудачу из-за множества различных выравниваний содержащихся в нем элементов управления, которые я не смог разумно обработать за одну короткую процедуру.

Второй подход, кажется, работает: на каждом TTabSheet я помещаю TPanel со следующими свойствами:

Align=alClient
BevelOuter=bvNone
Name=pnlDpiHelper<NameOfTabsheet>
ShowCaption=False

Я перемещаю все другие элементы управления (TEdit, TMemo и т. Д.) На этот TPanel. Результатом в режиме высокого разрешения является то, что теперь все правильно масштабируется!

Другие вопросы по тегам