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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2011, 15:17   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
Печаль Отработка события DrawColumnCell

Доброе время суток уважаемые форумчане,
Помогите новичку пожалуйста. В компоненте DBGrid есть событие DrawColumnCell, которое отрабатывает допустим при нажатии dbNavigator "связанного" с dbGrid и все замечательно (переход на другую строку состоялся). Но стоит выбрать стоку в dbGrid с помощью мышки, то событие DrawColumnCell зацикливается, и работает, пока в delphi не выберешь "Program Reset". Так вот, я не понимаю в чем причина зацикливания этого события и как с ним бороться. В Help я по поводу этого зацикливания ничего не нашел.
C уважением.
KBO вне форума Ответить с цитированием
Старый 03.07.2011, 15:33   #2
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

покажи код обработчика события.
ты в конце не забываешь вызывать обработчик по умолчанию: DefaultDrawColumnCell?
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 03.07.2011, 17:00   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Да, забыл. Но если у меня что-то не получается, то я смотрю на боле простом коде, например:

Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  showmessage('dataCol ='+ IntToStr(DataCol));
  DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); {<- вставил строку}
end;
И все равно такая же фигня получается (при щелчке мышкой на dbGrid - цикл). Может, я че-то не так делаю?


У нас принято оформлять код специальным тегом. Кнопка #. Модератор

Последний раз редактировалось dr.Chas; 04.07.2011 в 00:29.
KBO вне форума Ответить с цитированием
Старый 04.07.2011, 04:16   #4
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Ну тут для начала вопрос а что делаем то?
Для чего пытаемся приспособить DrawColumnCell?
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 04.07.2011, 09:57   #5
new player
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 153
По умолчанию

Я использовал DrawColumnCell для отображения иконок в ячейках. Насколько я понимаю это отображение было "зациклено", как, наверное, и любое событие в рамках этого свойства.
new player вне форума Ответить с цитированием
Старый 04.07.2011, 14:23   #6
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

Это событие DrawColumnCell возникает каждый раз когда перерисовывается ячейка в DBGrid.
Я как понял тебе нужно выполнять некий код при переходе на следующую (предыдущую) строку. Если так то используй событие DataSet`а AfterScroll
Gulik вне форума Ответить с цитированием
Старый 05.07.2011, 01:09   #7
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Отработка события DrawColumnCell

Просто стало понятно, что в собитии "DrawColumnCell", стоит выполнять только действия по перерисовке grid, я же в этот обработчик еще запрос к БД влепил.
А код был простой:

Код:
{простое приложение с одним обработчиком}
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 showmessage('dataCol ='+ IntToStr(DataCol)); {<-только вместо этой строки запрос}
end;
и щелканье мышкой по самому dgGrid в процессе выполнения приложения, все-таки приводит к непонятному зацикливанию, т.е. начанает выдаваться сообщение "dataCol = ..." (само сообщение grid не накрывает, так что ему перерисовыватся не зачем), пока в delphi не выберешь "Program Reset".
Я то сам думал, что этот код будет выполнятся только столько раз, сколько видимых ячеек в сетке (dbGriid), и оказался не прав.
Но видимо что-то вызывает "invalidate" или "repaint", как подсказали.
KBO вне форума Ответить с цитированием
Старый 05.07.2011, 08:17   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну вывалилось твое сообщение, после его удаления с экрана форма перерисовывается вместе с гридом и опять отрабатывает DrawColumnCell для ячеек - вот и зациклилось
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.07.2011, 11:36   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Отработка события DrawColumnCell

Спасибо всем за разъяснения.
Но ведь я немного поправлюсь. Цикл получается при непосрдственном переходе с строки на строку (при щелчке мышки на bdGrrid). А если использовать DBNavigator (как переход с строки на строку), то цикла НЕТ (т.е. сообщение вывалется определенное количество раз). Но я думаю это уже из другой "оперы".

Последний раз редактировалось KBO; 05.07.2011 в 13:48.
KBO вне форума Ответить с цитированием
Старый 05.07.2011, 13:48   #10
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Отработка события DrawColumnCell

Цитата:
Сообщение от Gulik Посмотреть сообщение
Это событие DrawColumnCell возникает каждый раз когда перерисовывается ячейка в DBGrid.
Я как понял тебе нужно выполнять некий код при переходе на следующую (предыдущую) строку. Если так то используй событие DataSet`а AfterScroll
Я бы последовал(ю) совету "Gulik", но мне тогда придется использовать глобальную переменную (чтобы передать параметр из AfterScroll в DrawColumnCell), что мне не хотелось делать.
Я вообщето против, применения глобальных переменных в приложениях.
KBO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TDBGrid DrawColumnCell AnBychkov Общие вопросы Delphi 0 16.09.2010 22:04
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
События session Общие вопросы C/C++ 2 21.06.2010 17:16
События yarilo JavaScript, Ajax 3 28.01.2010 23:18
Отработка текста в Паскаль spartanes_dk Паскаль, Turbo Pascal, PascalABC.NET 1 22.12.2008 18:49