248______________________________________________Глава 4

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

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

StaticTextl->Left = Panel2->Left + (Panel2->ClientWidth -

StaticTextl->Width) / 2;

ListBoxl->Height = min(Panell->ClientHeight - ListBoxl->Top - 20,

ListBoxl->ItemHeight * (ListBoxl->Items->Count +1)),

Первый из этих операторов сдвигает левый край компонента StaticTextl так,
чтобы метка всегда размещалась в середине панели Рапе12. А второй оператор из-
меняет высоту списка ListBoxl при изменении высоты панели Panell. Причем с
увеличением высоты панели увеличивается и высота окна списка, но не более, чем
до размера, когда в нем помещаются все занесенные в него строки плюс одна. Для
расчета этой максимальной высоты используются два свойства компонента List-
Box: ItemHeight — высота одной строки, Items->Count — число строк. При расче-
те использован также макрос min, возвращающий минимальное из двух значений.
Для того, чтобы этот макрос был понятен компилятору, в заголовочный файл мо-
дуля надо включить оператор

ftinclude <stdlib.h>

подключающий файл stdlib.h, в котором описан этот макрос.

Результат применения такой обработки событий представлен на рис. 4.9. Как
видно из него, теперь приложение сохраняет нормальный вид и при увеличении
пользователем размеров окна.

Рис. 4.9                          |Г"""       '      '
компонентов                      ,          ,.     ,....,„..,, """"!1

'..'„,.:'„:'',,, строк 1              ,,'.>^Ь^

строк 4

"•' ''!1! "t* строк 5

строк 6         :ИHI

СТРОК 7

I. • ,,,-,.,J строк 8
ЙЯШ' строк 9

mew, строк ю       ;в|й1

г- •:::::::!:: строк 11
строк 12

4.2.3 Панели с перестраиваемыми границами

В ряде случаев описанного автоматического изменения размеров различных
панелей оказывается недостаточно для создания удобного пространства для дейст-
вий пользователя. Даже при увеличении окна на весь экран какая-то панель при-
ложения может оказаться перегруженной информацией, а другая относительно
пустой. В этих случаях полезно предоставить пользователю возможность переме-