Логические типы, конструкции и компоненты
Флажки и радиокнопки
В программах, особенно в настройках, нередко используют флажки (которые иначе называют галочками) и радиокнопки. Флажки TCheckBox имеют логическую зависимость включен/выключен, поэтому изучим их в этой лекции. Радиокнопки TRadioButton также имеют такую зависимость. И флажок, и радиокнопка находятся на вкладке Standard Палитры компонентов:
Установите на форму один флажок. Посмотрим на его свойства.
Name задает имя компонента. Caption - пояснительный текст справа от флажка. Самое главное свойство для нас - Checked (англ. checked - проверенный). Оно имеет логический тип. Если в этом свойстве значение True, то флажок включен, иначе он выключен. Значение меняется автоматически, хотя его можно изменить и программно.
Свойство Name изменим на ChB1, чтобы проще к нему обращаться. В свойстве Caption укажите текст
Наш флажок
Вы можете заметить, что по мере ввода текста в свойство Caption ширина компонента увеличивается, чтобы уместился весь текст. Теперь изменим код обработки нажатия на кнопку:
procedure TfMain.Button1Click(Sender: TObject); begin if ChB1.Checked then ShowMessage('Наш флажок включен!') else ShowMessage('Наш флажок выключен!'); end;
Вы и без комментариев должны понять, что если в свойстве Checked нашего флажка ChB1 содержится значение True, то выйдет одно сообщение, иначе - другое. Сохраните проект и запустите его на выполнение. Включайте или выключайте флажок, после чего нажимайте кнопку. Сообщение скажет, включен флажок, или выключен.
State (состояние) - еще одно полезное свойство флажка. Это свойство определяет первоначальное значение флажка, кроме того, можно проверить его и в процессе работы программы. Может иметь следующие значения:
- cbChecked - включен
- cbGrayed - неопределен (от англ. gray - серый)
- cbUnchecked - выключен
Еще нас могут интересовать два события, которые доступны на вкладке События Инспектора объектов.
OnChange - При изменении. Событие возникает каждый раз, когда пользователь включает или выключает флажок. Вы можете сгенерировать это событие так же, как и событие нажатия на кнопку - дважды щелкнув по нему в Инспекторе объектов. Затем можете скопировать код из события кнопки, а событие кнопки очистить:
Теперь сообщения будут выходить сразу же при изменении состояния флажка. Кнопка же никаких действий совершать не будет. Однако не спешите ее удалять, она еще понадобится.
OnClick - событие также возникает, когда пользователь щелкнет мышью по компоненту, включив флажок, или выключив его.
Разница между этими событиями в том, что OnChange будет выполнен в любом случае - если пользователь мышью включил/выключил флажок, или если мы сделали это программно, например, вписав в событие кнопки Button1Click (между begin и end) код:
ChB1.Checked:= not ChB1.Checked;
Тогда при нажатии на кнопку состояние флажка изменится на противоположное - сработал наш перевертыш NOT. OnChange при этом сработает, а OnClick - нет, ведь мышью по компоненту не щелкали!
Теперь займемся радиокнопками. Если флажок можно использовать в единичном варианте, то радиокнопок должно быть как минимум две. Радиокнопки позволяют пользователю выбрать один из возможных вариантов, но для выбора одной такой кнопки будет явно недостаточно.
Давайте сымитируем выборы президента, установив 5 таких радиокнопок одну под другой. Свойства Name этих кнопок переименуем, соответственно, в RB1, RB2, RB3, RB4 и RB5. Ну, а в свойствах Caption этих кнопок запишем, соответственно
Путин Медведев Жириновский Зюганов Прохоров
Теперь нам нужно включить одну из этих радиокнопок. Поскольку нынешний президент у нас Путин, переведем в True свойство Checked радиокнопки RB1. В результате у нас получится такая форма:
Теперь изменим код нажатия на кнопку:
procedure TfMain.Button1Click(Sender: TObject); begin if RB1.Checked then ShowMessage('Вы выбрали Путина') else if RB2.Checked then ShowMessage('Вы выбрали Медведева') else if RB3.Checked then ShowMessage('Вы выбрали Жириновского') else if RB4.Checked then ShowMessage('Вы выбрали Зюганова') else ShowMessage('Вы выбрали Прохорова'); end;
Тут все достаточно прозрачно, обработка радиокнопок практически не отличается от обработки флажков. Единственное различие: пользователь не сможет отметить несколько радиокнопок, только одну из них. А флажки могут быть включены все, некоторые, или ни один. Раз уж мы создаем имитацию выборов, неплохо бы и в свойстве Caption формы написать Выборы. Сохраните проект, запустите на выполнение и играйте на здоровье в выборы президента.