Динамическое обновление цвета в DBGrid
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table1.FieldByName('Population').AsInteger > 20000000 then TDBGrid(Sender).Canvas.Font.Color := clBlue; TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
Вы можете также делать это без использования TTable или другого DataSource-объекта:
procedure TForm1.DBGrid1DrawColumnCell( Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const clPaleGreen = TColor($CCFFCC); clPaleRed = TColor($CCCCFF); begin If Column.FieldName = 'DS_Status' then // Удалите строку выше, чтобы окрасить всю строку в таблице, // иначе будет окрашена только ячейка If Column.Field.Dataset.FieldbyName('Population').AsInteger > 2000 //Так что Вы не должны знать, что Datasource это (Table или Query..) then If (gdFocused in State) //If the cell has the focus then dbgrid1.canvas.brush.color := clBlack else dbgrid1.canvas.brush.color := clPaleGreen; dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State) end;
Чтобы окрасить всю ячейку. Решение очень просто. Измените строку
TDBGrid(Sender).Canvas.Font.Color := clBlue; на TDBGrid(Sender).Canvas.Brush.Color := clBlue;
Комментарии