978_____________________________________________Глава 15

1е делается равным false, то компонент становится невидимым, исчезает для поль-
зователя. Если устанавливается в false свойство Visible компонента-контейнера, то
становятся невидимыми и все расположенные на нем дочерние компоненты, незави-
симо от значения их свойств Visible. Если свойство Visible ранее невидимого компо-
нента-контейнера устанавливается в true, то становятся видимыми и все его дочер-
ние компоненты, у которых Visible = true.

Свойство Visible позволяет проектировать на одном и том же месте формы не-
сколько панелей, соответствующих различным режимам работы приложения, и в
нужные моменты делать одну из них видимой, а остальные невидимыми, как в
приведенном ниже примере.

Свойство Visible может также активно использоваться для разделов меню.
Очевидно, что обычно не все разделы меню имеют смысл при любых режимах ра-
боты приложения. Ненужные разделы можно делать недоступными, задавая зна-
чения false их свойствам Enabled. В этом случае они будут видны серыми и недо-
ступными, но размер меню не изменится. А если их делать невидимыми, то они
видны не будут, оставшиеся разделы меню сомкнутся и все будет выглядеть более
компактно.

Прямое задание значений true и false свойству Visible можно заменить вызо-
вами методов Show и Hide. Первый из них делает компонент видимым и устанав-
ливает Visible в true. А второй делает компонент невидимым и устанавливает Vi-
sible в false.

Пример

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

Panel2->Visible = false;

Panel-Invisible = true;

Panel2->Parent = Formi;

Panel2->BoundsRect = Panell->BoundsRect;

Первый два из них делают панель Рапе12 невидимой, a Panell — видимой.
Впрочем можно было бы обойтись и без этих операторов, если задать в процессе
проектирования значения Visible, равными true для Panell и false для Рапе12.
Третий оператор делает родительским компонентом панели Рапе12 форму Formi.
А четвертый оператор задает панели Рапе12 то же местоположение и размеры, ко-
торые имеет панель Panell. Последнее необходимо, поскольку при проектирова-
нии ее координаты соответствовали координатному пространству контейнера —
клиентской области панели Panell. А теперь ее родитель сменился на форму, и
надо ее расположить в том же месте формы, в котором расположена Panell.

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

Panel2->BoundsRect = Panell->BoundsRect;

изменяющего положение Рапе12.

Аналогичный оператор может быть также реализован методом SetBounds:

Panel2->SetBounds(Panell->Left, Panell->Top, Panell->Width,
Panell->Height);