\

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

1В приведенном ранее примере логично для панели Рапе12 задать значение
Align, равным aITop, чтобы ширина панели автоматически менялась с изменени-
ем ширины окна. Панель займет всю верхнюю часть формы, а ее высота будет та-
кой, какую вы установите. Для панели Panell следует задать значение Align, рав-
ным alLeft, так как увеличение ее ширины не имеет смысла, а увеличение высоты
позволяет увидеть большую часть списка ListBoxl. Компонент Panell займет всю
левую часть клиентской области, оставшейся свободной после размещения Рапе12.
Для компонента Memol следует задать значение Align, равным alClient, что по-
зволит компоненту при увеличении пользователем площади окна растягиваться и
в высоту, и в ширину, увеличивая тем самым область редактирования. При этом
компонент Memol займет всю площадь клиентской области, оставшуюся после
размещения Panell и Рапе12. В результате во время выполнения при изменении
пользователем размеров окна приложение будет иметь вид, представленный на ри-
сунке 4.6.

Изменение размеров панелей при
использовании выравнивания                    • ^ •l;g-,;;)l;;;':^^„^в^^ч'••'!^^™ж•'''^aa-'^•l•

"к;,':^ строка?         ^||1Ж

строка 3        ^J^^                                                    !

|                                                                                                                      ,
-,„„„:„„,,„„,,.„„„,„„„„,„„„„,„„,„„.,„,_,„„,„,,„,,,.,„„„,,,-,,;__-

Задавать компонентам соответствующие значения свойства Align в приведен-
ном примере надо именно в указанной выше последовательности: аГГор для Ра-
пе12, alLeft для Panell, alClient для Memol. Если, например, начать с задания al-
Client для Memol, то компонент Memol займет всю площадь формы и остальные
компоненты вообще не будут видны.

Значения свойства Align имеют определенный приоритет: значения аГГор и
alBottom имеют более высокий приоритет, чем значения alLeft и alRight. Поэто-
му не любые варианты размещения и выравнивания панелей можно реализовать
непосредственно. Например, пусть вы хотите создать форму, вид которой приведен
на рис. 4.7 а. Причем вам надо, чтобы при изменении размеров окна панель Panell
продолжала занимать всю левую часть формы (т.е. надо задать Align = alLeft), Ра-
пе13 занимала бы всю нижнюю часть, площади, свободной от Panell (т.е. для Ра-
пе13 надо задать Align = alBottom), a Panel2 занимала бы всю оставшуюся часть
клиентской области (т.е. для Panel2 надо задать Align = alClient). Напрямую все
это сделать невозможно. Если вы задали для Panell значение alLeft, а затем для
Рапе13 задаете значение alBottom, то в силу приоритета alBottom панель Рапе13
займет всю нижнюю часть формы, вытеснив оттуда Panell.

В подобных случаях приходится вводить дополнительные панели-контейне-
ры. В приведенном примере на форме сначала надо разместить Panell и дополни-
тельную панель Рапе14, как показано на рис. 4.7 б. Для Panell задается alLeft, а
для Рапе14 задается alClient. Затем панели Panel2 и Рапе13 размещаются на Ра-
пе14 и для них задаются значения: alBottom для Рапе13 (поскольку клиентской
областью для Рапе13 является область панели Рапе14, то Рапе13 займет нижнюю