Окрашивание DBGrid

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

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

Окрашивание DBGrid

Сообщение mrkaban » 03.09.2016 14:29:55

Здравствуйте, подскажите пожалуйста, хочу менять цвет строки в зависимости от текстового значения одной из колонок.

Нашел способ, но он меняет только цвет шрифта, а я хотел самой строки.

Код: Выделить всё
procedure TfMian.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin
if DBGrid1.DataSource.DataSet.FieldByName('type').AsString = 'Платное ПО' then
  begin
   DBGrid1.Canvas.Brush.Color := clRed;
   DBGrid1.Canvas.Font.Style := [];
   DBGrid1.Canvas.Font.Color := clRed;
   DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;

end;
mrkaban
новенький
 
Сообщения: 55
Зарегистрирован: 28.05.2016 09:48:18

Re: Окрашивание DBGrid

Сообщение alexs » 03.09.2016 19:21:23

Возьми RxDBGrid - там для этого есть специальное событие.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Окрашивание DBGrid

Сообщение Zhanat » 05.09.2016 07:36:21

Код: Выделить всё
procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: integer; Column: TColumn; State: TGridDrawState);

begin

  if (ZQuery1.FieldByName('SPR').Value = '1') then
  begin
    TDBGrid(Sender).Canvas.Brush.Color := cllime;
    TDBGrid(Sender).Canvas.FillRect(Rect);
  end;
Zhanat
новенький
 
Сообщения: 21
Зарегистрирован: 06.09.2013 08:46:40

Re: Окрашивание DBGrid

Сообщение Xenar » 05.09.2016 10:54:16

IMHO это будет более кошерно (OnGetCellProps)
Код: Выделить всё
procedure Tf_annuity_loan.rxdbg_PaymentScheduleGetCellProps(Sender: TObject;
  Field: TField; AFont: TFont; var Background: TColor);
begin
if sql_PaymentSchedule.FieldByName('payment_is_made').AsInteger=1 then AFont.Color:=clTeal;
if (sql_PaymentSchedule.FieldByName('payment_is_made').AsInteger=0) AND
(sql_PaymentSchedule.FieldByName('date').AsDateTime < Date) then
   begin
     AFont.Color:= clWhite;
     AFont.Style:= [fsBold];;
     Background:= clRed;
   end;
end;


код взят из из проекта поэтому названия элементов свои.
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: Окрашивание DBGrid

Сообщение brick08 » 06.09.2016 06:13:04

Попробуй OnPrepareCanvas
brick08
новенький
 
Сообщения: 12
Зарегистрирован: 05.09.2016 15:39:08


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru