180____________________________________________Глава 3

Радиокнопки RadioButton могут размещаться не только в панели GroupBox,
но и в любой панели другого типа, а также непосредственно на форме. Группа
взаимосвязанных кнопок в этих случаях определяется тем оконным компонентом,
который содержит кнопки. В частности, для радиокнопок, размещенных непо-
средственно на форме, контейнером является сама форма. Таким образом, все
кнопки, размещенных непосредственно на форме, работают как единая группа,
т.е. только в одной из этих кнопок можно установить значение Checked в true.

3.3.5 Индикаторы CheckBox и CheckListBox

Индикаторы с флажком CheckBox (см. рис. 3.21 раздела 3.3.1) используются в
приложениях в основном для того, чтобы пользователь мог включать и выключать
какие-то опции, или для индикации состояния. При каждом щелчке пользователя
на индикаторе его состояние изменяется, проходя в общем случае последовательно
через три значения: выделение (появление черной галочки), промежуточное (серое
окно индикатора и серая галочка) и не выделенное (пустое окно индикатора). Этим
трем состояниям соответствуют три значения свойства компонента State: cbChec-
ked, cbGrayed, cbUnchecked. Впрочем, эти три состояния допускаются только при
значении другого свойства AllowGrayed равном true. Если же AllowGrayed = false
(значение по умолчанию), то допускается только два состояния: выделенное и не
выделенное. И State, и AllowGrayed можно устанавливать во время проектирова-
ния или программно во время выполнения.

Промежуточное состояние обычно используется, если индикатор применяется
для отображения какой-то характеристики объекта. Например, если индикатор
призван показать, какой регистр использовался при написании какого-то фраг-
мента текста, то в случае, если весь текст написан в верхнем регистре индикатор
может принимать выделенное состояние, если в нижнем — не выделенное, а если
использовались оба регистра — промежуточное.

Проверять состояние индикатора можно не только по значению State, но и по
значению свойства Checked. Если Checked равно true, то индикатор выбран, т.е.
State = cbChecked. Если,Checked равно false, то State равно cbUnchecked или
cbGrayed. Установка Checked в true во время проектирования или выполнения ав-
томатически переключает State в cbChecked.

Как и в радиокнопке, в индикаторе CheckBox надпись задается свойством
Caption, а ее размещение по отношению к индикатору — свойством Alignment.

Еще один компонент, имеющий индикаторы — список CheckListBox. Это ана-
лог рассмотренного в разделе 3.2.7 компонента ListBox, но около каждой строки
списка имеется индикатор, состояние которого пользователь может изменять.
Свойства, общие у CheckListBox и ListBox, мы рассматривать не будем, так как
все, характеризующее этот компонент как список, рассмотрено в разделе 3.2.7. А
состояния индикаторов определяют два свойства: State и Checked. Оба эти свойст-
ва можно рассматривать как индексированные массивы, каждый элемент которо-
го соответствует индексу строки. Общее количество элементов определяется свой-
ством Count (только для чтения). Поскольку индексы начинаются с 0, то индекс
последнего элемента равен Count — 1.

Свойства State и Checked можно устанавливать программно или читать, опре-
деляя установки пользователя. Например, операторы

CheckListBoxl->Checked[l] = true;

CheckListBoxl->State[2] = cbGrayed;

устанавливают индикатор второй строки списка CheckListBoxl в состояние вы-
бранного, а индикатор третьей строки — в промежуточное состояние (вспомним,
что индексы начинаются с 0).
Оператор