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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2017, 13:57   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Ошибка при ручном вызове события «OnDrawColumnCell»

Доброе время суток,
У меня есть несколько «DBGrid», которые должны окрашиваться одинаково и для придумал процедуру «COLOR_GRID(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState; AGrid: TDBGrid);» в которой выполняются действия по окраске всех «DBGrid». Данную процедуру я просто вызываю из собития «DBGridDrawColumnCell»

Код:
procedure TFRate.bvdbgrRateDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  Image_Sign_Deposit: TBitmap;
begin
  COLOR_GRID(Rect, DataCol, Column, State, bvdbgrRate);
  …
end;
- все отлично работает.

Но мне приходится, после редактирования таблицы, программно передергивать bvdbgrRateDrawColumnCell (для корректной окраски данных), способом

Код:
procedure TFRate.Button1Click(Sender: TObject);
var
  Rect: TRect;
  DataCol: Integer;
  Column: TColumn;
  State: TGridDrawState;
  AGrid: TDBGrid;
begin
  bvdbgrRate.OnDrawColumnCell(Sender, Rect, DataCol, Column, State);
end;
но в этом случае при вызове «COLOR_GRID» валится ошибка:

«class EAccessViolation with message 'Access violation at address 004041A4 in module 'MetaTrader.exe'. Read of address 00000036'. Process stopped. Use Step or Run to continue.»

В файле «…delphi7/source/rtl/sys/system.pas», на строке
Код:
function _IsClass(Child: TObject; Parent: TClass): Boolean;
begin
  Result := (Child <> nil) and Child.InheritsFrom(Parent);
end;
Что я делаю не так?

Заранее спасибо за ответ.

P.S.
- Для упрощения, я закоментировал все в процедуре «COLOR_GRID» (ошибка осталась).
- Мне всетаки кажется, что я не правильно вызываю событие:
Код:
bvdbgrRate.OnDrawColumnCell(bvdbgrRate, Rect, DataCol, Column, State);

Последний раз редактировалось KBO; 13.09.2017 в 14:33.
KBO вне форума Ответить с цитированием
Старый 13.09.2017, 15:17   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сделай перерисовку грида, refresh или repaint - само все раскрасится. А коль так вызываешь OnDrawColumnCell инициализировать параметры кто будет за тебя?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.09.2017, 15:40   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сделай перерисовку грида, refresh или repaint - само все раскрасится. А коль так вызываешь OnDrawColumnCell инициализировать параметры кто будет за тебя?
И как я про "refresh" забыл.
Еще раз спасибо.

P.S.
Работаю с "DataSet" там есть "refresh", а с гридом как-то про него не вспомнил
KBO вне форума Ответить с цитированием
Старый 13.09.2017, 15:45   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Он по идее и без refresh должен был перекраситься после Post
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.09.2017, 15:52   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Он по идее и без refresh должен был перекраситься после Post
После "Post" - да.
Но я удаляю елемент (влияющий на раскраску грида) из массива. А массив заполняется из другой таблицы, в начале работы программы, которую я также потом редактирую подзапросом (после удаления элемента).

Последний раз редактировалось KBO; 13.09.2017 в 15:55.
KBO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вызове функции Vilkas Помощь студентам 2 19.12.2014 06:18
Ошибка при вызове free() ivan.tiran Общие вопросы C/C++ 5 04.12.2014 23:01
ошибка при вызове процедуры Emperator12 Общие вопросы Delphi 8 22.09.2012 00:52
beginthread, ошибка при вызове Dreanks Помощь студентам 2 28.10.2010 14:09