![]() |
|
|
![]()
|
|
| Bosh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
База на SQL 2000 Подключаю с помощью ADO Есть таблицы в которых поля типа булеан
как вывести в DBGrid что бы в нем отображалось как Checкbox и можно было изменять значение |
|||
|
||||
| SPrograMMer |
|
|||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: 1 Всего: 6 |
библиотека EhLib компонент TDBTableEh, свойство CheckBoxes=True для столбца и... готово!
Добавлено @ 21:35 а еще: ПОИСК!!! -------------------- животное = зверь законченный гентушник |
|||
|
||||
| Fast |
|
||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 21.3.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Вот стандартный пример из DRKB (Delphi Russian Knowledge Base)!!!
КОМПОНЕНТ #3 - TDBCHECKBOX Технология работы с компонентом DBCheckBox более интересна. В этом случае нам необходимо дать понять пользователю о наличие компонента DBCheckBox в ячейках без фокуса. Вы можете вставлять статическое изображение компонента или динамически изменять изображение в зависимости от логического состояния элемента управления. Я выбрал второе. Я создал два BMP-файла - включенный (TRUE.BMP) и выключенный (FALSE.BMP) DBCheckBox. Поместите два компонента TImage на форму, присвойте им имена ImageTrue и ImageFalse и назначьте соответствующие BMP-файлы в свойстве Picture. Да, чуть не забыл: Вам также необходимо поместить на форму два компонента DBCheckbox. Установите набор данных обоих компонентов в DataSource1 и присвойстве свойству Color значение clWindow. Для начала создадим для формы обработчик события onCreate:
Теперь нам нужен обработчик события onDrawDataCell чтобы делать что-то с ячейками, не имеющими фокуса. Здесь подойдет следующий код:
Самое интересное место - последний участок кода. Он выполняется в случае, когда состояние не равно gdFocused и сам CheckBox находится в колонке. В нем осуществляется проверка данных поля: если они равны True, то выводится рисунок TRUE.BMP, в противном случае - FALSE.BMP. Предварительно я создал два изображения, представляющие собой "слепок" двух логических состояния компонента, теперь будет очень трудно обнаружить отсутствие компонента в ячейках с фокусом и без оного. Теперь напишем обработчик события onColExit:
Организуйте обработку события onKeyPress как показано ниже:
Наконец, последняя хитрость. Для удобства пользователя заголовку компонента нужно присвоить текущее логическое значение. С самого начала у меня была идея поручить это обработчику события onChange, но проблема в том, что событие может возникнуть неединожды. Итак, я должен снова воспользоваться функцией Windows API и послать компоненту соответствующее значение: "SendMessage(DBCheckBox1.Handle, BM_GetCheck, 0, 0)", которая возвращает 0 в случае если компонент невключен и любое другое число в противном случае.
Это все. Надеюсь, Вы узнали для себя что-то новое. Я пробовал данную технологию с диалоговыми окнами. Делается достаточно просто и великолепно работает. Радует простота реализации. Вам даже не нужно знать как это работает, единственное, что Вам придется - заменить в тексте кода имена вымышленных компонентов на те, которые Вы реально хотите отображать в табличной сетке. Ревизия Вышеприведенный код оказался несвободным от недостатков - после первой публикации совета дотошные программисты таки обнаружили две значительные недоработки. Первая проблема - если компонент имеет фокус, то для перемещения на следующую ячейку необходимо двукратное нажатие клавиши Tab. Вторая проблема возникает при добавлении новой записи. Или Используй компонент DbGridEh из библиотеки EhLib вместо своего грида =) Мне очень понравился |
||||||||||
|
|||||||||||
| Bosh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
СПАСИБО Попробую разобраться.
|
|||
|
||||
| Bosh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
Подскажите где скачать библиотеку EhLib
|
|||
|
||||
| Dynamic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 372 Регистрация: 5.7.2004 Где: Салехард Репутация: 2 Всего: 15 |
набери в поисковике EhLib - удивишься
-------------------- Было бы о чем молчать, а уж что сказать – всегда найдется... |
|||
|
||||
| Savek |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
Я не сторонник использования чужих компонентов, поэтому привожу еще вариант решения
Процедура отрисовки чекбокса вызывается если поле если поле имеет логический тип:
А вот сама процедура
А вот код для изменения значения щелчком мыши
|
||||||
|
|||||||
| RGirichev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 22.6.2006 Где: Белоруссия Репутация: нет Всего: нет |
Savek, а можно ли сделать чтобы только при нажатии на сам checkbox он менялся а не на всю строку?
|
|||
|
||||
| Savek |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
Добавь проверку имени поля, по которомы кликнули
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Я не помню, есть ли в MS SQL поля типа Boolean.
Как я делаю в FB. Создаю поле типа VarChar(1), по умолчанию там значение 'F'. В гриде, в свойствах столбца есть свойство keylist, типа TStrings, пишу туда:
т.е. первая строка для True, вторая для False и в свойствах столбца ставлю CheckBox := True; всё а ещё у FIB+ есть понятие "эмуляция полей типа Boolean". Если в базе FB создать поле типа Int и в названии поля будет присутствовать "BOOLEAN", например "IS_PHOTO_BOOLEAN", то компонента TpFIBDataSet автоматически создат для этого поля столбец в датасете типа TFIBBooleanField, и программист сможет работать с этим столбцом, как нормальным полем типа Boolean. |
|||
|
||||
| SergeBS |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Fast,
Пробовал я этот пример - умучаешься размеры подгонять, и при изменении размера колонки, разрешения - разваливается. И не простой он. А вот способ, описанный Savek работает как надо. Akella,
Называется bit. Delphi (ADO) с ним работает как с boolean. Хотя хранятся 0 или 1.
Свойства столбца - чьи, какого компонента? У DBGrid такого нет. Что-то нестандартное применяешь. Savek,
Спешишь. Немного не так: If Column.FieldName = 'нужное поле' then begin : -лишнее И проверка тоже лишняя |
||||||
|
|||||||
| student |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.8.2006 Репутация: нет Всего: нет |
Можно поподробнее где найти DrawCheckbox...чето я догнать не могу ((( |
||||
|
|||||
| Savek |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
Что найти? Код процедуры? Он после слов "А вот и сама процедура"
|
|||
|
||||
| student |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.8.2006 Репутация: нет Всего: нет |
В свойствах какого компонента его искать?
Открыл табицу БД Access c помощью ADOQuery...DBCheckBox на форму закинул связал с столбцом типа Boolean a DrawCheckbox не находит |
|||
|
||||
| Savek |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
???.....???..... При чем тут DBCheckBox? Процедура DrawCheckBox всего лишь имитирует его в ячейках сетки |
|||
|
||||
| student |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.8.2006 Репутация: нет Всего: нет |
Откуда она берется эта процедура, как ее вызвать?
|
|||
|
||||
| Savek |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
Читай здесь
|
|||
|
||||
| student |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.8.2006 Репутация: нет Всего: нет |
Savek,
если есть несекретная программа где используется это скинь пожалуйста исходники на почту |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |