Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2015, 12:01   #1
city32
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 48
По умолчанию Изменение цвета строки Dbgrid при нажатии кнопки

Здравствуйте. Подскажите пожалуйста как можно организовать выделение строки dbgrid при нажатии например пробела.
Знаю что изменить цвет строки можно через DBGrid1DrawColumnCell. Проверка нажатия идет через onkeypress. Есть мысль вызвать процедуру DBGrid1DrawColumnCell в процедуре onkeypress если клавиша пробел нажата, но что то не могу сообразить как это реализовать.
city32 вне форума Ответить с цитированием
Старый 04.04.2015, 15:18   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

DbgridDrawColumnCell вызывается в любой момент когда система(НО не ВЫ) решает что ячейку(строку/колонку/таблицу/форму целиком) надо и есть возможность(ВСЕ прочие действия по мнению системы выполнены) путем ПОСЫЛКИ сообщения ВАМ (приложению/программе) WM_PAINT (одним из результатов которого и является вызов DBGridDrawColumnCell ПРЕДНАЗНАЧЕННОЕ чтобы программа могла модифицировать "стандартное поведение" рисование )

Если мы хотим вмешаться в рисование мы должны установить флаг который мы СМОЖЕМ потом проверить в DBGridDRawColumnCell и определить параметры отрисовки для указанной ячейки(колонки+ строки) и сообщить системе от том что неплохо бы заняться прорисовкой объекта заново (Repaint|Invalidate|...).
Теперь когда она "освободится" все будет нарисовано в соответствии с вашими пожеланиями (флаг + код DBgridColumnDrawCell)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 04.04.2015, 15:26   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

И поскольку в строке грида отображается информация некоторой записи датасета этот флаг обычно поле или комбинация полей датасета. Или чего либо однозначно связанного с информацией этой записи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.04.2015, 15:56   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
этот флаг обычно поле или комбинация полей датасета.
подозреваю ТС пытается сделать MultiRowSelect
Цитата:
можно организовать выделение строки dbgrid при нажатии например пробела.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 04.04.2015, 16:59   #5
city32
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 48
По умолчанию

Смысл задачи такой, что выводятся данные запроса и пользователь их сравнивает с тем что на бумаге и чтобы не запутаться что он уже посмотрел, а что нет, ему надо выделить строку.
Никаких больше действий не будет, только выделить и убрать выделение.
Я менял цвет строки через edit. Ставил что если нажата клавиша пробел, то edit-у присваивается 1 и цвет меняется на серый, если нажата клавиша enter, то edit-у присваивается 0 и цвет строки становится белым. Но это очень топорно получается и не совсем правильно. Вводить поле для флага то же не очень бы хотелось.

Последний раз редактировалось city32; 04.04.2015 в 17:05.
city32 вне форума Ответить с цитированием
Старый 04.04.2015, 17:43   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

поле вводится в НД(DataSet) связанный с DBgrid (можно как Вычислимое но тогда нужен еще и массив по которому его вычислять)
далее можно
1 показать данное поле как checkbox
2 показать поле как 0/1
3.нарисовать строчку как угодно в зависимости от данного поля (DrawGridColumnCell)

4. Безо всяких дополнительных полей использовать DBGrid.Options.
Цитата:
dgMultiSelect More than one row in the grid can be selected at a time.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 04.04.2015, 18:33   #7
city32
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 48
По умолчанию

спасибо буду пробовать
city32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение цвета фона строки в DBGrid Ericnex БД в Delphi 6 30.08.2012 13:37
изменение цвета объекта при нажатии кнопки мыши con Visual C++ 0 10.06.2012 02:56
Изменение процедур, исполняемых при нажатии кнопки. AlexeyKrupnik Общие вопросы Delphi 2 28.04.2012 00:27
Изменение цвета кнопки при ее нажатии RedRec Microsoft Office Excel 2 04.08.2011 09:11