Копия викизеркало

Это зеркало вики с pascal.chat. Правка, история и вход — там.

LCL AutoSizing/ru

English · Русский

Обзор / Терминология

На этой странице объясняется алгоритм автомасштабирования в LCL. AutoSizing означает здесь: автоматическое изменение размера и перемещение элементов управления LCL.

Если вам просто интересно, как использовать свойства AutoSize, см. Autosize/Layout.

Свойства

Следующие свойства определяют поведение автомасштабирования в LCL:

Для совместимости с Delphi LCL поддерживает метод AdjustClientRect, который является расширением свойств ChildSize.LeftRightSpacing/TopBottomSpacing.

Порядок

Обзор

Автомасштабирование работает в несколько этапов:

В основном свойство AutoSizing работает в следующем порядке:

Алгоритм выравнивания и привязки

Основным методом является TWinControl.AlignControls.

  1. инициация RemainingClientRect в ClientRect и RemainingBorderSpace в Rect(0,0,0,0)
  2. вызов AdjustClient, чтобы настроить RemainingClientRect
  3. применение ChildSizing.LeftRightSpacing,ChildSizing.TopBottomSpacing
  4. вызов DoAlign с alTop,alBottom,alLeft,alRight,alClient,alCustom,alNone
    1. DoAlign собирает дочерние элементы управления с этим значением Align и вызывает для каждого такого контрола DoPosition
    2. DoPosition вычисляет новые Left,Top,Width,Height

DoAutoSize

Этот [метод] вызывается [методом] DoAllAutoSize и не должен вызываться приложением. Приложения должны вызывать AdjustSize и/или InvalidatePreferredSize.

Если он не переопределен, нормальный TWinControl.DoAutoSize делает следующее, когда AutoSize=true:

Он будет перемещать "элементы управления без выравнивания" - дочерние элементы управления с привязками по умолчанию (Anchors=[akLeft,akTop],Align=alNone). Он переместит все их одинаковое количество, поэтому их общий ограничивающий прямоугольник растягивается влево и вверх. Рассматривается интервал между BorderSpacing и ChildSize.
Перед перемещением есть место слева и над кнопками:

После перемещения:

Затем вычисляется предпочтительный размер элемента управления. В этом расчете учитываются дочерние элементы управления, Align, Anchors, Constraints, ChildSizing.Layout и другие свойства LCL.

Размер элемента управления изменен:

См. также: Выравнивание и свойство AutoSize родителя

DisableAutoSizing/EnableAutosizing

см здесь.

Отличия от Delphi

FAQ

см. Autosize / Layout.


From the Free Pascal wiki, page "LCL AutoSizing/ru", as it stood on 2018-12-09 after a change by FTurtle, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Версия 2, последнее изменение: WikiArchive, .