Например, мы хотим, чтобы наша сетка отобразила строки информации стран. Если население страны больше 20 миллионов, мы отобразим его строку с синим текстом. Мы проверяем значения и обновляем цвет текста в событии OnDrawColumnCell.
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;
По материалам http://delphi.3000.com
|