Проектирование графического интерфейса пользователя______________247

мере задать свойство Anchors равным [akLeft,akTop,akBottom], то при изменении
высоты панели, содержащей этот список, будут поддерживаться постоянными рас-
стояния верхнего и нижнего краев списка соответственно от верхнего и нижнего
краев панели. Таким образом, увеличивая высоту окна пользователь может увели-
чивать число строк, видимых в списке без прокрутки. Если задать свойство Anc-
hors равное [akLeft,akTop, akRight] для метки StaticTextl, то при изменении ши-
рины содержащей ее панели будут поддерживаться постоянными расстояния лево-
го и правого краев метки от соответствующих краев панели. Метка будет оставать-
ся в центре панели, но ее размер будет изменяться. Вариант нашего примера с за-
данными описанным способом свойствами Anchors для ListBoxl и StaticTextl,
приведен на рис. 4.8. Как видно из него, теперь приложение сохраняет нормаль-
ный вид и при увеличении пользователем размеров окна. А в списке ListBoxl при
увеличении размера даже исчезла полоса прокрутки, т.к. весь текст уместился на
экране.

Изменение размеров компонентов     'sraneS®??             ^^втй"*™"'"""''^^^"^^
при использовании привязки         ^ЙЗД^-            ^^———.—^—————_„.——:

Anchors                                 '.•'^'„___,        |                                 i

:::•::'•'/^:'•.. строк ^
'•':'.'"•'•.:••   строк 2                :,„;•. .

;  строк 4            i||||^

Для того, чтобы это нормально работало, надо еще в обработчик события Оп-
Resize формы или панели, содержащей метку StaticTextl, вставить оператор

StaticTextl->Repaint() ;

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

В приведенном примере неоправданно изменился размер метки StaticTextl.
Такое поведение компонента не всегда желательно. В подобных случаях надо пере-
ходить к программному изменению местоположения компонента. Это необходимо
делать и в ранних версиях C++Builder, в которых свойство Anchors отсутствует.

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

Размеры компонента определяются свойствами Width — ширина и Height —
высота. Есть еще одно свойство BoundsRect, характеризующее одновременно и мес-
тоположение, и размеры компонента, но оно менее удобно и используется редко.

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