CheckBox внутри DBGrid | ![]() | ![]() |
Статьи |
Есть способ разместить CheckBox в DBGrid для редактирования булевых полей в наборе данных. Предположим, что Вы имеете булево поле в наборе данных. По умолчанию, DBGrid отображает такое поле как True или False в зависимости от значения. Создадим простое приложение.Для начала запустим Delphi и разместим на форме TDBGrid, TADOTable, TADOConnection и TDataSource. Оставим все имена, как их определил Delphi. Используйте Если Вы установили все свойства правильно, то когда Вы запустите приложение (если свойство ![]() Что же нужно сделать для того, чтобы наше приложение выглядело, как это, ниже: ![]() Выберите TDBCheckBox на палитре компонентов и поместите его где-нибудь на форме. Затем установите его свойство Visible в False. Измените его свойство Color на тот же самый цвет, что и DBGrid1, чтобы он гармонировал с сеткой и удалите Caption. И, что не менее важно, удостоверьтесь, что DBCheckBox1 связан с DataSource1 и с полем ( Обратите внимание, что все вышеперечисленные свойства могут быть установлены в событии OnCreate формы, например:
Далее более интересная часть. При редактировании булева поля в DBGrid, мы должны удостовериться, что DBCheckBox1 помещен в ячейку DBGrid, в которой отображается булево поле. Для остальной части сетки булево поле также должно быть представлено каким-либо изображением (истинного или ложного значения). Это означает, что мы нуждаемся, как минимум в двух изображениях: одно для истинного значения (True) и одно для ложного значения (False). Самый легкий способ выполнить это состоит в том, чтобы использовать функцию Windows API DrawFrameControl, чтобы рисовать непосредственно на холсте DBGrid. Вот код в обработчике события OnDrawColumnCell, которое происходит, когда сетка должна перерисовывать ячейку:
Чтобы закончить это действие, мы должны удостовериться, что DBCheckBox1 невидим, когда мы покидаем ячейку.
Мы нуждаемся еще в обработке двух событий: перехват нажатия клавиатуры и нажатие на Пробел должен изменять состояние CheckBox.
И, наконец, последнее. Это может быть соответствующий заголовок CheckBox, когда пользователь переключает его. Обратите внимание, что DBCheckBox имеет два свойства (ValueChecked и ValueUnChecked), которые определяют значение поля, представленное переключателем. В нашем случае мы можем записать ValueChecked – Да, а ValueUnChecked – Нет.
|
聯(lián)系客服