如何改变StringGrid单元格的背景颜色,让相临行显示不同颜色?

解决方案 »

  1.   

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      index: integer;
    begin
      index := ARow * StringGrid1.ColCount + ACol;
      with Sender as TStringGrid do
      begin
         if (ARow Mod 2) = 0 then
        Canvas.Brush.Color := clBackGround;
        Canvas.FillRect(Rect);    if gdFocused in State then
          Canvas.DrawFocusRect(Rect);
      end;end;
      

  2.   

    写自画事件(OnDrawCell事件):
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      S:String;
    begin
      S:=StringGrid1.Cells[ACol,ARow];
      if ARow mod 2=0 then
      begin
        StringGrid1.Canvas.Brush.Color:=clRed;
        StringGrid1.Canvas.Pen.Color  :=clRed;
      end
      else
      begin
        StringGrid1.Canvas.Brush.Color:=clLime;
        StringGrid1.Canvas.Pen.Color  :=clLime;
      end;
      StringGrid1.Canvas.FillRect(Rect);
      DrawText(StringGrid1.Canvas.Handle,
               PChar(S),
               Length(S),
               Rect,
               DT_Center or DT_VCenter or DT_SingleLine);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      i,j:integer;
    begin
      for i:=0 to 4 do
        for j:=0 to 4 do
          StringGrid1.Cells[i,j]:=IntToStr(Random(122));
    end;