Учись программированию на C++ Builder бесплатно!
  • Главная
  • Как изменить местоположения и размеров компонентов?
Изменение местоположения и размеров компонентов
Содержание[Скрыть]

У всех оконных компонентов есть удобное свойство Anchors, которое привязывает к родительскому компоненту при изменении размеров. Это свойство представляет собой множество, которое может содержать некоторые элементы управления. В случае, если в свойстве Anchors имеются привязки к противоположным сторонам родительского компонента, то при изменении размеров родительского компонента будет осуществляться растяжение или сжатие дочернего компонента, т.к. расстояние от сторон родительского компонента соблюдается. Сжатие дочернего компонента может происходить до полного его исчезновения на форме приложения.

Чтобы этого не произошло, необходимо устанавливать ограничение диапазона допустимых размеров.

Таблица значений свойства Anchors

Тип Описание
akTop Верхний край компонента привязан к верхнему краю его родительского компонента.
akLeft Левый край компонента привязан к левому краю его родительского компонента.
akRight Правый край компонента привязан к правому краю его родительского компонента.
akBottom Нижний край компонента привязан к нижнему краю его родительского компонента.

По умолчанию привязка компонента осуществляется к левому верхнему краю родительского компонента (значение у свойства Anchors установлено [akLeft,аkТор]). При установке свойству Anchors привязку к противоположным сторонам родительского компонента, то будет изменяться размер компонента вместе с изменением размеров родительского компонента. Например, для компонента списка ListBox, задав свойству Anchors значение равным [akLeft,akTop,akBottom], то при изменении высоты панели, содержащей этот список, будут поддерживаться постоянными расстояния верхнего и нижнего краев списка соответственно от верхнего и нижнего краев панели. Т.е. при увеличении высоты окна компонента пользователь сможет увеличить число строк, видимых в списке без прокрутки.

Если для метки StaticText задать свойству Anchors значение равным [akLeft,akTop,akRight], то при изменении ширины содержащей её панели будут поддерживаться постоянными расстояния левого и правого краёв метки от соответствующих краёв панели. Таким образом, метка StaticText будет оставаться в центре панели, но её размер будет изменяться. Чтобы увеличение компонента метки работало нормально, необходимо в обработчик события OnResize формы или панели, где расположена метка StaticText, вставить следующий метод:

StaticText1->Repaint();

В примере выше идёт обращение к методу Repaint, который перерисовывает метку. Если данный код не прописать, то при изменении размеров окна в метке появится надпись на новом месте, при этом старая надпись останется, т.е. получится дублированная надпись.

Left и Тор

Местоположение компонента задаётся с помощью свойств Left и Тор, которые характеризуют координаты левого верхнего угла компонента. При этом началом координат считается левый верхний угол клиентской области компонента-контейнера. Горизонтальная координата отсчитывается от этой точки вправо, а вертикальная вниз.

Width и Height

Размеры компонента определяются свойствами Width (ширина) и Height (высота).

BoundsRect

Свойство BoundsRect позволяет задавать одновременно и размеры, и местоположение компонента. Оно редко используется программистами, т.к. менее удобное.

ClientWidth и ClientHeight

Данные свойства определяют размер клиентской области компонента-контейнера. Для некоторых компонентов они совпадают со свойствами Width и Height. Но могут и отличаться от них. Например, в форме приложения ClientHeight меньше, чем Height, т.к. не учитываются бордюр, меню, полосы заголовка и горизонтальной прокрутки.

Поскольку надо изменить местоположение и размеры компонентов при изменении размеров формы приложения, то ClientWidth и ClientHeight следует размещать в обработчиках событий OnResize формы программы или соответствующей панели. Эти события возникают при любом изменении пользователем размеров окна приложения или размеров панели.

Пример местоположения и размера

StaticText1->Left = Panel1->Left + (Panel1->ClientWidth - StaticText1->Width) / 2;

Приведённый выше код сдвигает левый край компонента StaticText1 таким образом, чтобы метка всегда размещалась в середине панели Panel1. Следует учитывать и убирать привязку метки к краям панели, установленных не по умолчанию. В противном случае, размер метки будет меняться вместе с формой.

Поделиться