Неправильные элементы автоматического масштабирования с привязками на 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. Результатом в режиме высокого разрешения является то, что теперь все правильно масштабируется!