Разноцветный DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Разноцветный DBGrid

Сообщение Валентина » 29.10.2013 14:56:11

В дельфи работает вот такая раскраска DBGrid
Код: Выделить всё
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if ... then
begin
         TDBGrid(Sender).Canvas.Brush.Color:=clYellow;
         TDBGrid(Sender).Canvas.Font.Color:=clBlack;
end
else
begin
         TDBGrid(Sender).Canvas.Brush.Color:=clBlue; 
         TDBGrid(Sender).Canvas.Font.Color:=clYellow;
end
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

В Лазарусе цвет шрифта меняется, а цвет фона - нет. Подскажите, в чем дело может быть и как решить проблему.
Валентина
новенький
 
Сообщения: 16
Зарегистрирован: 02.09.2013 13:05:37

Re: Разноцветный DBGrid

Сообщение *Rik* » 29.10.2013 15:23:14

Последовательность вызовов:
procedure Paint -> procedure DrawAllRow -> proecdure DrawRow -> procedure DrawCell.
procedure DrawCell в TDBGrid:
PrepareCanvas - погтоавливает инструменты рисования Canvas: Brash, Font и т.д.
if DefaultDrawing then DefalutDrawCell - Заливает фон и выводит текст
if Assigned(OnDrawColumnCell) then OnDrawColumnCell - Пользовательская функция рисования
DrawCellGrid - рисует сетку

Как видите, здесь сначала идет стандартная функция заливки и вывода текста (если Default Drawing), потом уже вызывается пользовательская.

Поставьте DefaultDrawing := False, должно работать как вам нужно.
Последний раз редактировалось *Rik* 29.10.2013 15:37:31, всего редактировалось 1 раз.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Разноцветный DBGrid

Сообщение Валентина » 29.10.2013 15:37:27

Эвон как... Спасибо.

Добавлено спустя 11 минут 4 секунды:
Хм, теперь фон стал во всех ячейках серый...
Валентина
новенький
 
Сообщения: 16
Зарегистрирован: 02.09.2013 13:05:37

Re: Разноцветный DBGrid

Сообщение *Rik* » 29.10.2013 17:07:28

Валентина писал(а):Эвон как... Спасибо.

Добавлено спустя 11 минут 4 секунды:
Хм, теперь фон стал во всех ячейках серый...


В стандартной процедуре рисования идет вызов DefaultDrawCell, вы вызываете DefaultDrawColumnCell.
DefaultDrawCell объявлена в защищенном разделе класса и вам будет не доступна, а ваша DefaultDrawColumnCell не производит заливку ячеек цветом.

Попробуйте залит фон самостоятельно:
TDBGrid(Sender).Canvas.FillRect(Rect);
Код: Выделить всё
if ... then
begin
         TDBGrid(Sender).Canvas.Brush.Color:=clYellow;
         TDBGrid(Sender).Canvas.Font.Color:=clBlack;
end
else
begin
         TDBGrid(Sender).Canvas.Brush.Color:=clBlue; 
         TDBGrid(Sender).Canvas.Font.Color:=clYellow;
end;
TDBGrid(Sender).Canvas.FillRect(Rect);
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Разноцветный DBGrid

Сообщение Валентина » 30.10.2013 08:24:58

Ура! Ура! Раскрасилось! Спасибочки огромное!!! Вы гений!
Валентина
новенький
 
Сообщения: 16
Зарегистрирован: 02.09.2013 13:05:37


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234

Рейтинг@Mail.ru
cron