例如当StringGrid1.Cells[1,1]='10000'时StringGrid1的第二行正行底色显示红色请大家帮帮忙

解决方案 »

  1.   

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
     Rect: TRect; State: TGridDrawState); 
    var 
     s: String; 
     R: TRect; 
    begin 
     if ARow = 3  then 
     begin 
       case ACol of 
         1: TStringGrid(Sender).Canvas.Brush.Color := clGreen; 
         2: TStringGrid(Sender).Canvas.Brush.Color := clRed; 
         3: TStringGrid(Sender).Canvas.Brush.Color := clYellow; 
         4: TStringGrid(Sender).Canvas.Brush.Color := clBlue; 
       end; 
       S := TStringGrid(Sender).Cells[ACol, ARow]; 
       R := TStringGrid(Sender).CellRect(ACol, ARow); 
       TStringGrid(Sender).Canvas.FillRect(R); 
       TStringGrid(Sender).Canvas.TextOut(R.Left, R.Top, S); 
     end; 
    end;
      

  2.   

    procedure SetGridColor(ARow,ACol: Integer;ColorJ,ColorO: TColor; Rect: TRect;StrGrid: TStringGrid);
    var
      strValue:  String;
    begin
      with StrGrid do
      begin
       //画背景
       if  (ARow > 0) and (ACol > 0)  then
       begin
         if (ARow mod 2 = 0) then
           Canvas.Brush.Color  := ColorO
         else
           Canvas.Brush.Color  := ColorJ;
         if (ARow=StrGrid.Row) then Canvas.Brush.Color := clMoneyGreen;//clMenuHighlight;
         Canvas.FillRect(Rect);
       end;
       //计算显示在矩形框中的左上角位置
       strValue  :=  Cells[ACol,ARow];
       Canvas.Font  :=  Font;
       //在矩形框中写值
       Canvas.TextRect(Rect,Rect.Left+5,Rect.Top+(Rect.Bottom-Rect.Top-Canvas.TextHeight(strValue)) div 2,strValue);
      end;
    end;