将StringGrid的defaultdrawing属性设为false,则里面的字和颜色都没有了,为什么?

解决方案 »

  1.   

    关掉那个属性后,就要自己画了,想画成什么效果都行,如果打开这个属性,都是delphi默认的
      

  2.   

    defaultdrawing设成false,就得靠你自己写代码去往里面“画”文字和图像
      

  3.   

    關掉後,就需要自己處理了,在 onpanit 裏面自己去畫了
      

  4.   


    太有才了!再请教一个问题,以下代码的功能是:当点击一个单元格,该单元格的背景颜色变成红色,字体变成蓝色?问题是:为什么鼠标一离开颜色就消失呢?要怎么做才颜色才不会消失呢?procedure TForm1.StringGrid3DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if (ACol = StringGrid3.col) and (ARow = StringGrid3.row) then
      begin
        StringGrid3.Canvas.Font.Color := clBlack;
        StringGrid3.Canvas.textrect(Rect, Rect.left, Rect.Top, StringGrid2.Cells[ACol, ARow]);
        StringGrid3.Canvas.Brush.Color := clRed;
        StringGrid3.Canvas.FillRect(Rect);
      end;
    end;
      

  5.   

    那是因为一离开,stringgrid的Col和Row属性就变了.你可以定义两个全局的变量: 
    var
      iRow, iCol: Integer
    然后:
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
    if (ACol = iCol) and (ARow = iRow) then
      begin
        StringGrid1.Canvas.Font.Color := clBlack;
        StringGrid1.Canvas.textrect(Rect, Rect.left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
        StringGrid1.Canvas.Brush.Color := clRed;
        StringGrid1.Canvas.FillRect(Rect);
      end;end;procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    begin
      iRow := ARow;
      iCol := ACol;
    end;
      

  6.   

    你试的是空表,先填上数字再点击鼠标试试!如果将将StringGrid的defaultdrawing属性设为false,鼠标离开后颜色不消失,但表中的数字不见了和固定列(行)的颜色不见了;设为True后鼠标一离开颜色就消失了。现在就是要找到一个统一点,What?
      

  7.   

    再設兩变量,保存原來的位置,恢復原來的顏色。文字再研究一下得。
    var
    iRow, iCol: Integer ;
    oldrow,oldcol:integer;procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      stringgrid1.Canvas.Font.Color:=clblack;
      stringgrid1.Canvas.TextRect(rect,rect.Left,rect.Top,stringgrid1.cells[oldcol,oldrow]);
      stringgrid1.Canvas.Brush.Color:=clwhite;
      stringgrid1.Canvas.FillRect(rect);
      if (ACol = iCol) and (ARow = iRow) then
      begin
        StringGrid1.Canvas.Font.Color := clBlack;
        StringGrid1.Canvas.textrect(Rect, Rect.left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
        StringGrid1.Canvas.Brush.Color := clRed;
        StringGrid1.Canvas.FillRect(Rect);
      end;
    end;procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    begin
      oldrow:=irow;
      oldcol:=icol;  iRow := ARow;
      iCol := ACol;
    end;