为了界面上的需要,程序中每一个DBGrid都要在OnDrawColumnCell事件中写同样的一段代码。有没有什么办法可以制作一个新的DBGrid,会自动调用OnDrawColumnCell事件,实现自绘。请高手给出代码,谢谢

解决方案 »

  1.   

    你做一个窗口上放一个dbgrid来继承就行了...
      

  2.   

    能不能直接创建一个新的,具有这种功能的DBGrid?
      

  3.   

    你可以自己写一个控件,继承于DBGrid,并有你的事件
    or 你用一个Frame,上面放一个DBGrid,并有你的事件
    要在其它地方使用,加入此Frame
      

  4.   

    1。boygong(好小子) ( ) :你做一个窗口上放一个dbgrid来继承就行了...
    这个 方法有点不妥吧!这样不能把dbgrid当作控件来用而是当成现成的窗口来载入,多数情况下不能达到目的。2。belllab(bell) ( ) :你可以自己写一个控件,继承于DBGrid,并有你的事件
    or 你用一个Frame,上面放一个DBGrid,并有你的事件
    要在其它地方使用,加入此Frame
    这个方法很好呀,以前我也用过,其实不见得非要用frame,用其他可以装载dbgrid控件的容器控件都可以。可以在菜单中的insert中的选择框中选择添加控件,即可按照这种方法来作,自己动手多尝试一下就好了!!!!!!!!!!
      

  5.   

    type
      TMyGrid = class(TCustomDBGrid)
      protected
        property OnDrawColumnCell;
        procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;Column: TColumn; State: TGridDrawState); override;
      end;TDBGrid继承于TCustomDBGrid,只是将一些被protected的属性published了,所以你的这个控件直接继承于TCustomDBGrid,要实现自动调用OnDrawColumnCell事件,只需要覆盖基类的DrawColumnCell事件,在该事件中写入你的代码就行了。
      

  6.   

    TMYDbGrid = class(TCustomDBGrid)
      procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
      Column: TColumn; State: TGridDrawState);procedure TMYDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;
      Column: TColumn; State: TGridDrawState);
    begin
      //写上你OnDrawColumnCell事件中写的一段代码
    end;
      

  7.   

    你可以把OnDrawColumncell写成一个单独的过程啊,然后每次创建就调用它不就可以达到目的了吗?
      

  8.   

    最简单的方法:
       将你已经写好代码的dbgrid控件(在设计窗体中的)用鼠标选中,然后点component-->Create component template... 然后填写一些信息告诉delphi将新控件添加到何处就行了。不需要再写新的控件,我想这对新手来说应该是比较安全的方法吧。