给一个类增加属性方法事件都很简单
但如何给类里面包含的类增加属性我就完全糊涂了
如:
一个控件继承自tdbgrid
我现在想给tdbgrid里面的tcolumn增加一个属性type怎么搞啊。能不能这样搞?
请各位高手帮小弟我解决难题!最好有例子;

解决方案 »

  1.   

    你另外建个类,从tcolumn,给她增加属性,然后在写你的控件
      

  2.   

    ljmanage(过客)
    假设我照你的方法做了,
    新增一个类ts_column,继承自tcolumn.增加属性type;
    然后再
    新增一个ts_dbgrid,继承自tdbgrid.
    但是我如何让ts_dbgrid里包含的列(tcolumn)具有ts_column的功能呢?也就是具有type属性呢?请指小弟一条明路。
      

  3.   

    把ts_dbgrid新增一个属性column_xx类型为ts_column
      

  4.   

    继承自TDBGrid,重载所有创建TColumn的方法,把类型TColumn改成TS_Column就行了。
      

  5.   

    你們有沒有去試過啊?
    我照你們的方法做了好像都不行,是我水平太低還是....
    不過請不要不負責任的猜答案撈分......
    有誰拿出一個可行實例出來.
    只要很簡單就好了,
    我想這是一個概念性的問題.
    能夠解決對我幫助很大.
    100分全部給他.
    再加也可以.反正我可用分還有幾千分.
    (例子只要你在dbgrid的列加一個最簡單的屬性就可以了)
      

  6.   

    自己改造DELPHI帶的源碼吧
    在DBGRIDS.PAS中
    個性 TColumn 類,在它里面加入你要的屬性
    再替換掉系統原有的.DCU文件即可
      

  7.   

    打錯字了,上面的個性應該是修改,Hi,Hi
      

  8.   

    修改Delphi的VCL代码是有风险的。但是也不失为一个有效的方法。此外,虽然我理解你的心情,但是并不是每个人都有那么多的时间帮你去一一测试。你如果对答案不满意,可以不给分。然后,我再稍微详细说一下我的看法(当然完全没有测试过,你也可以不看)。1、新建一个控件,继承自TDBGrid控件,名为TMyDBGrid;同时继承TColumn为TMyColumn。
    2、在TMyColumn中添加你想要的属性。
    3、在DBGrid的源代码中搜索创建TColumn的代码,记下相应的类方法的名称。如果我估计不差,这些代码应该不多。
    4、在TMyDBGrid中重载所有涉及创建TColumn的类方法(如果不是虚方法的话就用reintroduce强制重载)。复制TDBGrid中相应的部分TMyDBGrid中,再替换所有创建TColumn的代码为创建TMyColumn的代码。
    5、编译安装TMyDBGrid控件。
      

  9.   

    cybercake(数字蛋糕) 
    你所說的方法我早就試過了.
    基類的方法里面如果有用到private 變量.
    那麼強制重载后是無法訪問到private 變量,當然也就會出錯.或是一些功能丟失
      

  10.   

    直接指定column的类型为你自己定义的类就行了
      

  11.   

    xikug(西方不敢很帅) 
    請問該如何指定?聽你講好像很簡單,能不能寫一兩句出來給我看看?因為我實在太菜了!
    將不勝感激!
      

  12.   

    对不起,原来没有注意到private这个问题。我今天稍微看了一下DBGrid的源代码。觉的还是有可能的。下面是一个例子。已经测试过了。unit SSDBGrid;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids;type
      TSSColumn = class(TColumn)
      private
        FXXX: Integer;
        procedure SetXXX(const Value: Integer);
      published
        property XXX : Integer read FXXX write SetXXX;
      end;  TSSDBGrid = class(TDBGrid)
      private
        { Private-Deklarationen }
      protected
        { Protected-Deklarationen }
        function  CreateColumns: TDBGridColumns; override;
      public
        { Public-Deklarationen }
      published
        { Published-Deklarationen }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Beispiele', [TSSDBGrid]);
    end;{ TSSDBGrid }function TSSDBGrid.CreateColumns: TDBGridColumns;
    begin
      Result := TDBGridColumns.Create(Self, TSSColumn);
    end;{ TSSColumn }procedure TSSColumn.SetXXX(const Value: Integer);
    begin
      FXXX := Value;
    end;end.安装这个控件就OK了。