TStringGrid不能单独设置某个单元的颜色,你应该用TDrawGrid,自己画吧。隐藏某行某列的功能也需要自己动手,你可以去网上找一找有没有现成的。

解决方案 »

  1.   

    这种问题看来只有我能回答你了!
    响应StringGrid的OnDrawCell事件即可,注意STRINGGRID也是有CANVAS属性的,以下是一个例子,希望对你有所启发:
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
         with StringGrid1.Canvas do
         begin
             Brush.Color:= RGB(255,0,0) ;
             Pen.Style := psSolid ;
             Pen.Width := 2 ;
             Pen.Color:= RGB(0,255,0) ;
             case ACol of
             1:begin
                    Rectangle(Rect.Left,Rect.Top,Rect.Right,Rect.Bottom) ;
               end ;
             2:begin
                    Moveto(Rect.Left,Rect.Top);
                    Lineto(Rect.Right,Rect.Bottom) ;
               end
              else
              begin
                   Ellipse(Rect.Left,Rect.Top,Rect.Right,Rect.Bottom) ;
              end ;
         end ;
         end ;
    end;
    给多少分看你好了!如果需要帮助,Em!ok!
      

  2.   

    johnpei:
       你的方法只是从视觉上看起来是这么回事,但我问的是从逻辑上来控制,举个例子,
    我要在某时刻(不一定非在StringGrid1DrawCell时触发),指定某行的颜色,还能这么做吗?   另外,隐藏某行某列呢?
       再加把劲。
      

  3.   

    隐藏可以某列时可以将WIDTH设置为-1;
    隐藏某行可以将其行设置为0或-1,实际事好像设置为0要好看一些。
    改变颜色我做了一个简单的,你试试,它可以改变了(1,2)的颜色和字体,当然你还需要完善。
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      ARect:TRect;
    begin
      ARect:=StringGrid1.CellRect(1,2);
      with StringGrid1 do
      begin
        with Canvas do           //改变当前行的颜色
        begin
          Brush.Color:=$00AAA866;
          Font.Color:=clBlack;
          Font.Style:=[fsBold];
          FillRect(aRect);
          TextOut(aRect.Left+2,aRect.Top+3,Cells[1,2]);
      end;
    end;
      

  4.   

    在string grid 中右键单击有改变的列,选者column edit,弹出一个小窗口,单击add all fields 图标,就添加了所有的列,选者你要的列,在object inspector 的properties下可
    修改color ,visible 等属性.