Отображение и выбор значения поля

Отображение и редактирование значения логического поля

Логическое поле (поле логического типа) может содержать одно из двух значе­ний: true (истина) или false (ложь). Разрешается использование прописных букв и сокращение вводимого значения, т. е. допустимы значения True, true, tru, Tr, t и т. д.

Для отображения и изменения значения логического поля можно использовать редактор DBEdit. Однако удобнее выполнять эти действия с помощью переклю­чателя DBCheckBox, который позволяет "включить" или "выключить" значение логического поля.

Переключатель DBCheckBox является аналогом рассмотренного ранее компонента CheckBox, поэтому здесь мы остановимся только на свойствах, характерных именно для этого переключателя.

Компонент DBCheckBox выглядит на экране как квадрат (флажок) с текстовым заголовком (рис. 8.1). Если в нем находится галочка (при этом говорят, что флажок "включен" или "отмечен"), то связанное с этим переключателем логиче­ское поле текущей записи содержит значение True. Если же квадрат пуст (флажок выключен), то логическое поле текущей записи содержит значение False.

Переключатель DBCheckBox можно применять также для отображения и редакти­рования строковых полей, если воспользоваться свойствами ValueChecked и ValueUnChecked.

Свойство ValueChecked типа string содержит строковые значения, которые ус­танавливают связанный с этим полем переключатель во включенное состояние. Отдельные значения разделяются точкой с запятой. В качестве значений допус­каются любые алфавитно-цифровые символы, в том числе русские буквы. Ре­гистр алфавитных символов не различается, т. е. значения ДА и да считаются одинаковыми. Например:

DBCheckBoxl.ValueChecked: ='True;T;Yes; Y;Да;Д' ;

Свойство ValueUnChecked типа String содержит строковые значения, которые устанавливают связанный с этим полем переключатель в выключенное состоя­ние. Значения задаются таким же образом, как и для свойства ValueChecked:

DBCheckBoxl.ValueUnChecked:='False;F;No;N;Нет;Н';

Если поле не содержит ни одного из значений, указанных в свойствах ValueChecked и ValueUnChecked, то переключатель устанавливается в неопреде­ленное состояние.

Отметим, что несмотря на наличие приведенных свойств, возможности пере­ключателя DBCheckBox по редактированию строковых полей намного меньше, чем у элемента DBEdit.



В ряде случаев возникает необходимость ввода или отображения в поле одного из значений, входящих в состав фиксированного набора. С этой целью удобно использовать компонент DBRadioGroup (рис. 8.1), представляющий собой группу зависимых переключателей, из которых в каждый момент времени может быть включен (выбран) только один. Зависимые переключатели также называют кнопками выбора; на форме они отображаются в виде круга с текстовой надписью.

Рис. 8.1.Использование переключателей

 

Отметим, что выбрать для поля одно из значений можно также с помощью спи­сков, которые представляют для этих целей более широкие возможности.

Управление числом и названиями переключателей производится с помощью свой­ства Items типа TStrings, позволяющего получить доступ к отдельным переклю­чателям в группе. Это свойство содержит строки, отображаемые как заголовки переключателей. Отсчет строк в массиве начинается с нуля: Items [0], Items [1] и т. д. Обычно задание значений этому свойству выполняется при разработке приложения с помощью Редактора строк. При выполнении приложения для манипуляции со строками (заголовками) можно использовать такие методы, как Add и Delete.

Свойство Values типа TStrings содержит список значений поля, на которые должны реагировать переключатели группы. Управление этим списком осущест­вляется аналогично управлению списком items. Если возможные значения свойства values не заданы, то они выбираются из значений свойства items, т. е. в этом случае значение, соответствующее переключателю, совпадает с названием этого переключателя.

Группа переключателей работает следующим образом. Переключатель включает­ся при переходе к очередной записи, если значение связанного с ним поля со­держит одно из значений, присутствующих в списке Values. Если же поле со­держит значение, отсутствующее в списке возможных, то ни один переключатель не выбирается. Изменение значения поля происходит при выборе другого переключателя группы.

Замечание

Для поля, с которым связана группа переключателей, пользователь может вы­брать значение только из списка. Попытки ввести в поле произвольное значе­ние, например с помощью компонента DBGrid, блокируются.

В примере, приведенном на рис. 8.1, группа переключателей имеет заголовок Условия продажии связана с полем Note набора данных. При перемещении на шестую запись в группе автоматически выбирается третий переключатель, имеющий название (и такое же значение) Оптом и в розницу.Если выбрать другой переключатель, например первый, то в поле Note шестой записи автома­тически занесется новое значение — Оптом.

Замечание

Новое значение поля будет зафиксировано в наборе данных и отображено дру­гими визуальными компонентами (DBGrid и подобными) после потери фокуса группой переключателей, например, в связи с переходом к другой записи.

Доступ к отдельному переключателю можно получить через свойство itemindex типа integer, содержащее позицию (номер) переключателя, выбранного в груп­пе в текущий момент. Это свойство используется для выбора отдельного пере­ключателя или для определения, какой из переключателей является выбранным. Если свойство itemindex имеет значение -1, то не выбран ни один из переклю­чателей.

Замечание

При программном выборе переключателя необходимо переводить набор дан­ных в режим редактирования, а после установки нового значения поля закреп­лять сделанные изменения, например, вызовом метода Post.

Вот пример, иллюстрирующий выбор переключателя на программном уровне:

procedure TForml.ButtonlClick(Sender: TObject);