984_____________________________________________Глава 15

Это справедливо по отношению к неоконным объектам, таким, как кнопки,
метки, изображения и т.д., а также и к оконным компонентам, таким, как Memo,
ComboBox и др. Но все неоконные компоненты всегда расположены в Z-последова-
тельности ниже оконных и метод BringToFront не может изменить это правило.
Например, попытка перенести наверх методом BringToFront метку, размещенную
под оконным компонентом, ни к чему не приведет.

Примеры

1. Пусть вы хотите, чтобы в каком-то месте формы размещалась кнопка, которая
в зависимости от текущего режима работы имела бы два различных набора
свойств и выполняла бы различные функции. Вы можете разместить в нуж-
ном месте две кнопки друг на друге (пусть они имеют имена Button 1 и But-
ton2), задать каждой нужные свойства и для каждой описать соответствую-
щие обработчики событий. Тогда для смены этих кнопок вы в соответствую-
щих местах кода программы пишете операторы

Buttonl->BringToFront() ;

или
Button2->BringToFront() ;

и пользователь будет видеть то одну, то другую из этих кнопок.

2. Пусть в приложении в одном и том же месте формы друг на друге расположе-
ны две панели: Panell и на ней Рапе12, содержащие какие-то управляющие
компоненты для разных режимов работы. Рапе12 расположена на Panell, ко-
торая является, таким образом, ее родителем. В обработчик события формы
OnCreate можно вставить операторы:

Panel2->Parent = Formi;

Panel2->BoundsRect = Panell->BoundsRect;

Panell->BringToFront() ;

Первый оператор делает родительским компонентом панели Рапе12 4'орму
Formi. Второй оператор задает панели Рапе12 то же местоположение и разме-
ры, которые имеет панель Panell. Последнее необходимо, поскольку при про-
ектировании ее координаты соответствовали координатному пространству
контейнера — клиентской области панели Panell. А теперь ее родитель сме-
нился на форму, и надо ее расположить в том же месте формы, в котором рас-
положена Panell. Третий оператор перемещает наверх форму Panell.

Приведенный код можно сократить, и убрать из него первый оператор, если в
процессе проектирования размещать панель Рапе12 не на панели Panell, а в
каком-то другом месте непосредственно на форме (это, кстати, много удобнее с
точки зрения проектирования каждой панели). Тогда в обработчике события
формы OnCreate достаточно двух операторов:

Panel2->BoundsRect = Panell->BoundsRect;

Panell->BringToFront();

изменяющих положение Рапе12 и перемещающих наверх форму Panell.

В результате работы приведенных операторов в момент создания формы на
ней будет видна панель Panell. В момент, когда ее надо заменить на Рапе12,
можно выполнить оператор:

Panel2->BringToFront() ;

выносящий наверх вторую панель. Когда надо вернуть на экран изображение
Panell, можно выполнить операторы: