Russian Belarusian English German Japanese Ukrainian
  • Главная
  • Изменение местоположения и размеров компонентов
Изменение местоположения и размеров компонентов

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

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

По умолчанию привязка осуществляется к левому и верхнему краям родительского компонента. Т.е. по умолчанию свойство Anchors равно [akLeft,аkТор]. Если задать в свойстве Anchors привязку к противоположным сторонам родительского компонента, то при изменении размеров родительского компонента будут меняться размеры и данного компонента. Если для списка ListBox1 задать свойство Anchors равным [akLeft,akTop,akBottom], то при изменении высоты панели, содержащей этот список, будут поддерживаться постоянными расстояния верхнего и нижнего краев списка соответственно от верхнего и нижнего краев панели. Таким образом, увеличивая высоту окна пользователь может увеличивать число строк, видимых в списке без прокрутки. Если задать свойство Anchors равное [akLeft,akTop,akRight] для метки StaticText1, то при изменении ширины содержащей ее панели будут поддерживаться постоянными расстояния левого и правого краев метки от соответствующих краев панели. Метка будет оставаться в центре панели, но ее размер будет изменяться.

Для того чтобы увеличение нормально работало, надо еще в обработчик события OnResize формы или панели, содержащей метку StaticText1, вставить оператор:

StaticText1->Repaint();

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

В приведенном примере неоправданно изменился размер метки StaticText1. Такое поведение компонента не всегда желательно. В подобных случаях надо переходить к программному изменению местоположения компонента. Местоположение компонента задается свойствами Left и Тор, характеризующими координаты левого верхнего угла компонента. При этом началом координат считается левый верхний угол клиентской области компонента-контейнера. Горизонтальная координата отсчитывается вправо от этой точки, а вертикальная вниз. Размеры компонента определяются свойствами Width (ширина) и Height (высота). Есть еще одно свойство BoundsRect, характеризующее одновременно и местоположение, и размеры компонента, но оно менее удобно и используется редко.

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

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

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

Этот оператор сдвигает левый край компонента StaticText1 так, чтобы метка всегда размещалась в середине панели Panel2. Только чтобы это нормально работало, надо убрать привязку метки к правому краю панели, которая была введена ранее. Иначе размер метки все-таки будет меняться.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Поиск по сайту