小弟想要在StringGrid中设置其中一行的字体格式、颜色等,在DrawCell事件中写代码,用DrawText写,但是有一个问题,就是设完一行后,这行的最后一列那格会再变回默认的字体格式,前面几格就是我所想要的效果。将DefaultDraw属性设为False后可以解决这个问题,但在拖动格子时边框就会乱掉。不知道有哪位大哥碰到过这个问题?能否告知一个解决的方法。

解决方案 »

  1.   

    DefaultDraw:=False;后不会重绘控件-->拖动格子时边框当然会乱掉.
    如果想要实现你所要的功能,最好从StringGrid的祖先中去继承.
      

  2.   

    参考dbgrid的用法,有很多这样的贴子
    http://blog.csdn.net
      

  3.   

    DefaultDraw:=False;
    在Grid1DrawCell中 with Sender as TStringGrid do
    begin
                      
                      .... if (ACol =ColCount -1) then
    begin
    Canvas.Font.Style:= [fsBold];
                               ...
    end;                   ...
    end;
      

  4.   

    我用profgrid控件了,还是这样最方便
      

  5.   

    //参考如下代码
    type
      TStringGridEx = class(TStringGrid);procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if not ((ACol = 2) and (ARow = 2)) then Exit;
      TStringGridEx(Sender).OnDrawCell := nil;
      try
        TStringGridEx(Sender).Canvas.Font.Color := clRed;
        TStringGridEx(Sender).Canvas.Brush.Color := clYellow;
        TStringGridEx(Sender).Canvas.Font.Name := '黑体';
        TStringGridEx(Sender).Canvas.Font.Size := 16;
        TStringGridEx(Sender).DrawCell(ACol, ARow, Rect, State);
      finally
        TStringGridEx(Sender).OnDrawCell := StringGrid1DrawCell;
      end;
    end;