procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with (Sender as TDBGrid) do
begin
if ((State = [gdSelected]) or (State = [gdSelected, gdFocused])) then
begin
Canvas.Font.Color := clHighlightText;
Canvas.Brush.Color := clHighlight;
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State); //这行是关键
end;
end;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with (Sender as TDBGrid) do
begin
if ((State = [gdSelected]) or (State = [gdSelected, gdFocused])) then
begin
Canvas.Font.Color := clHighlightText;
Canvas.Brush.Color := clHighlight;
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State); //这行是关键
end;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Dbgrid1.DataSource.DataSet.RecNo = TStringGrid(DbGrid1).Row then
begin
tag := TDBGrid(Sender).Canvas.brush.Color;
TDBGrid(Sender).Canvas.brush.Color := clred; //你也可以改一下font.color来达到你的目的 TDBGrid(Sender).DefaultDrawColumnCell(rect, datacol, column, state);
TDBGrid(Sender).Canvas.brush.Color := tag;
end;
end;
Canvas.Brush.Color就是背景色,必成clRed就可以了
如果记录只有页就可以,可是如果记录多于两页,在拉下下一页时就不起作用了。to Snakeguo(枫):
这样好象只能对选择的单元格变色,但不是整行都变色。
的办法,但
if (Rect.Top = TStringGrid(DBGrid1).CellRect(TStringGrid(DBGrid1).Col,TStringGrid(DBGrid1).Row).Top) and (not (gdFocused in State) or not DBGrid1.Focused) then
DBGrid1.Canvas.Brush.Color := clAqua;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);我擦擦汗先
:(