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

щать границы, разделяющие различные панели, изменяя их относительные разме-
ры. Пример такой возможности можно увидеть в программе Windows «Провод-
ник».

В библиотеке C++Builder имеется специальный компонент — Splitter на стра-
нице Additional, который позволяет легко осуществить это (см. раздел 3.5.2 гла-
вы 3). При работе с ним надо соблюдать определенную последовательность проек-
тирования. Если вы хотите установить Splitter между двумя панелями, первая из
которых будет выровнена к какому-то краю клиентской области, а вторая займет
всю клиентскую область, то сначала надо выровнять первую панель, например,
влево. Затем надо перенести на форму Splitter и выровнять его в ту же сторону
(тоже влево). Splitter прижмется к соответствующему краю первой панели. После
этого можно задать выравнивание второй панели на всю оставшуюся площадь кли-
ентской области. В результате Splitter окажется зажатым между двумя панелями
и при запуске приложения он позволит пользователю изменять положение соот-
ветствующей границы между этими панелями.

Подобные разделители Splitter можно разместить между всеми панелями
приложения, дав пользователю полную свободу изменять топологию окна, с кото-
рым он работает.

Компонент Splitter имеет событие OnMoved, которое наступает после конца
перемещения границы. В обработчике этого события надо предусмотреть, если не-
обходимо, упорядочение размещения компонентов на панелях, размеры которых
изменились: переместить какие-то метки, изменить размеры компонентов и т.д.

В C++Builder имеются еще компоненты перестраиваемых панелей специаль-
ного вида CoolBar и ControlBar. Эти компоненты рассмотрены в разделе 3.5.5.

4.2.4 Ограничение пределов изменения размеров окон
и компонентов

Все рассмотренные ранее методы изменения размеров панелей и компонентов
на них имеют общий недостаток: при чрезмерном уменьшении пользователем раз-
меров окна какие-то компоненты могут исчезать из поля зрения. Иногда к некра-
сивым с точки зрения эстетики результатам приводит и чрезмерное увеличение
размеров окна. Хотелось бы иметь средства, ограничивающие пользователя в его
манипуляциях с окном и не позволяющие ему чрезмерно уменьшать и увеличи-
вать размеры.

В C++Builder 4 такое средство предложено. Это свойство Constraints, прису-
щее всем оконным компонентам и позволяющее задавать ограничения на допусти-
лые изменения размеров. Свойство имеет четыре основных подсвойства: МахНе-
ight, MaxWidth, MinHeight и MinWidth — соответственно максимальная высота
.1 ширина и минимальная высота и ширина. По умолчанию значения всех этих
1юдсвойств равны 0, что означает отсутствие ограничений. Но задание любому из
JTHX свойств положительного значения приводит к соответствующему ограниче-
нию размера заданным числом пикселей.

Чтобы какие-то компоненты не исчезали из пбля зрения, можно задать им
ограничения минимальной высоты и длины. Таким образом можно поддерживать
нормальные пропорции отдельных частей окна. Можно задать ограничения на ми-
нимальные и максимальные размеры формы, т.е. всего окна. Например, если вы
зададите для формы значения MaxHeight = 500 и MaxWidth = 500, то пользова-
тель не сможет сделать окно большим, чем квадрат 500 х 500. Причем это ограни-
чение будет действовать даже если пользователь нажмет системную кнопку, разво-
рачивающую окно на весь экран. Окно развернется, но его размеры не превысят за-
данных. Это иногда полезно делать, чтобы развернутое окно не заслонило какие-то
другие нужные пользователю окна.

I