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

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

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

Ответить
mrkaban
новенький
Сообщения: 55
Зарегистрирован: 28.05.2016 08:48:18
Контактная информация:

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

Сообщение mrkaban »

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

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

Код: Выделить всё

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;
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Возьми RxDBGrid - там для этого есть специальное событие.
Zhanat
новенький
Сообщения: 21
Зарегистрирован: 06.09.2013 08:46:40

Сообщение Zhanat »

Код: Выделить всё

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;
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

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;


код взят из из проекта поэтому названия элементов свои.
brick08
новенький
Сообщения: 12
Зарегистрирован: 05.09.2016 14:39:08

Сообщение brick08 »

Попробуй OnPrepareCanvas
Ответить