if ARow mod 2=1 then
begin
  SGrd.Canvas.Brush.Color:=clInactiveBorder;
end
else
  SGrd.Canvas.Brush.Color:=clWhite;
SGrd.Canvas.Rectangle(Rect);

解决方案 »

  1.   

    你这个不是设置背景色吧,是直接在stringgrid的canvas上画举行,canvas画布是用来显示内容的,当然会被覆盖,你可以在string的drawcell方法里绘制单元格的背景色
    procedure Tform1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
    Rect: TRect; State: TGridDrawState);
    var
    s: String;
    R: TRect;
    begin
        TStringGrid(Sender).Canvas.Brush.Color := clred;
        S := TStringGrid(Sender).Cells[ACol, ARow];
        R := TStringGrid(Sender).CellRect(ACol, ARow);
        TStringGrid(Sender).Canvas.FillRect(R);
        TStringGrid(Sender).Canvas.Font.Color := clTeal ;
        TStringGrid(Sender).Canvas.TextOut(R.Left, R.Top, S);
    end;