Четвертый BORLAND С++ и его окружение

       

Окна схемы


Окна схемы (разметки) инкапсулируют класс TLayoutWindow, инкапсулирующий производный от TWindow класс TLayoutWindow. Как и

TFrameWindow, TLayoutWindow создает основу для декорированных

окон-рамок и возможности упорядочения элементов в области рамки.

Окна схемы (или разметочные окна) называются так потому, что

могут упорядочивать дочерние окна в своей клиентной области. Расположение дочерних окон определяется относительно окна схемы или

другого дочернего окна ("братского" окна - окна равного уровня).

Расположение дочернего окна зависит от параметров схемы, которые

включат в себя ряд правил, описывающих координаты X и Y окон, их

высоту и ширину. Эти правила обычно основываются на координатах

братского окна и, в итоге, на размере и организации окна схемы.

Параметры схемы для дочерних окон содержатся в классе TLayoutMetrics. Объекты параметров схемы состоят из ряда ограничений

схемы. Каждое ограничение описывает правило определения конкретного изменения окна, например X-координаты или ширины окна. Эти

ограничения хранятся в структуре TLayoutConstraints, но обычно



используются производные от нее классы, такие как TEdgeConstraint.

Ограничения схемы определяют соотношение между краем или

размером одного окна и краем или размером братского или родительского окна схемы. Это соотношение может быть достаточно гибким.

Например, можно задать ширину окна как процент от ширины родительского окна. Ограничения задаются обычно с помощью функции

Set, которая определяется в классе TEdgeConstraint и в результате

наследуется из TEdgeOrWidthConstraint и TEdgeOrHeightConstraint.

Параметр edge функции Set определяет, какую часть окна вы

ограничиваете. Для этого используется enum TEdge с 5 возможными

значениями:

  • lmLeft определяет левый край окна.
  • lmTop определяет верхний край окна.
  • lmRight определяет правый край окна.
  • lmBottom определяет нижний край окна.
  • lmCenter определяет центрирование окна (горизонтальное или

    вертикальное).

  • С помощью enum TWidthHeight можно задать ограничение высоты


    или ширины окна:

  • lmWidth задает, что ограничением должна быть ширина окна.


  • lmHeight задает, что ограничением должна быть высота окна.


  • rel задает соотношение между краями окна (lmAsis, lmPersentOf, lmAbove, lmLeftOf, lmBelow, lmRightOf, lmSameAs, lmAbsolute).


  • otherWin задает окно, содержащее ваше дочернее окно. Для

    спецификации родительского окна используется lmParent.


  • otherEdge задает конкретный край otherWin, с помощью которого вы ограничиваете свое дочернее окно (допускаются те же значение, что и для edge).


  • value имеет разный смысл в зависимости от значения rel и

    Units.


  • TEdgeConstraint содержит также ряд функций, которые вы можете использовать для задания предопределенных соотношений, тесно

    связанных с теми, которые задаются в Set.

    Для задания схемы окна недостаточно одного ограничения расположения. Например, указание того, что окно должно находиться на

    10 элементов изображения ниже другого окна ничего не говорит о

    высоте и ширине окна, расположении его левого или правого края

    или нижней границы. Комбинация ограничений схемы расположения может полностью определить расположение окна. TLayoutMetrics использует 4 ограничения расположения: два объекта TEdgeConstraint

    (X и Y), TEdgeOrWidthConstraint (Width) и TEdgeOrHeightConstraint

    (Height).

    TLayoutMetrics - достаточно простой класс. Его конструктор

    не имеет параметров и только устанавливает элемент каждого ограничения. Для каждого ограничения схемы ограничивающее окно обнуляется, соотношение устанавливается в lmAsIs, единицы устанавливаются в lmLayoutUnits, а значение - в 0.

    После построения объекта TLayoutMetrics вам нужно задать ограничения схемы нужного окна. Для установки каждого ограничения

    можно использовать соответствующую функцию.

    Чтобы лучше понять, как совместно работают ограничения, выполните пример приложения LAYOUT из каталога примеров программ.

    Его диалоговое окно позволяет изменить ограничения каждого из

    окон и увидеть результаты. Однако ограничения нужно описывать

    полностью. Неполное описание может приводить к аварийному завершению.


    Содержание раздела