我想在TDrawGrid中改变单元格填充色,怎么做到

解决方案 »

  1.   

    可以对选中部分填充,
    应该可dbgrid一样的,
    你搜索dbgrid的贴吧,能找到
      

  2.   

    procedure TfrmMain.btnDrawClick(Sender: TObject);
    var
      SR1,SR2: TRect;
      SR: TGridRect;
    begin
      dg1.Canvas.Brush.Color:=clRed; // dg1: the draw grid
      SR:=dg1.Selection;
      SR1:=dg1.CellRect(SR.Left,SR.Top);
      SR2:=dg1.CellRect(SR.Right+1,SR.Bottom+1);
      dg1.Canvas.FillRect(
        Rect(Sr1.Left,Sr1.Top,
             Sr2.Left,Sr2.Top)
        );
    end;
      

  3.   

    在TDrawGrid的OnMouseUp事件中调用上述代码,确实改变颜色
    procedure TfrmMain.FillDrawGrid(dg1: TDrawGrid);
    var
       sr1,sr2: TRect;
       sr: TGridRect;
    begin
       dg1.Canvas.Brush.Color := clGreen;
       sr := dg1.Selection;
       sr1 := dg1.CellRect(sr.Left,sr.Top);
       sr2 := dg1.CellRect(sr.Right+1,sr.Bottom+1);
       dg1.Canvas.FillRect(Rect(sr1.Left,sr1.Top,sr2.Left,sr2.Top));
    end;procedure TfrmMain.DrawGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       FillDrawGrid(DrawGrid1);
    end;但是每次激活此事件,前一次的填充色消失了。怎么保留上一次的填充色呢
      

  4.   

    以前做过,把画框的代码放在onDrawDataCell或者ONDrawColumnCell事件中.
      

  5.   

    放到OnDrawCell事件中依然不行,不信各位试试,在TDrawGrid上画个汉字
      

  6.   

    点击  一般是 右键点击有效(我也不知道为什么)  不过我还是觉的点击后给他做个标记  在OnDrawCell里对标记判断期待更好的方法
      

  7.   

    不知道楼主要改它的什么颜色,是单元格的话,你在它的DrawCell事件里进行重画就行了,你要是改变它网格线的颜色,在它的父类里有一个Paint的方法,它有一个DrawLines方法,它有两个参数叫做OnColor和OffColor,你直接改它就行了.
    改变网格的颜色:
    procedure TfrmFrontManager.frmListFrame1grdListDrawCell(Sender: TObject;
      ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    var
      Index: Integer;
    begin
      index := ColCount * ARow + ACol;
      with Sender as TDrawGrid do
      begin
       if index mod 2 = 0 then
         Canvas.Brush.Color := clGreen
       else
         Canvas.Brush.Color := clYellow;
       
       Canvas.FillRect(Rect);
      end;
    end;
      

  8.   

    我是要在TDrawGrid上以点阵方式画出一个文字来,要记住上一次重画的区域颜色,怎么做到?