一个派生类件如何继承2个基类?这样的 我这有个三方控件TRealICQContacterTreeView  它没有多选节点的属性,儿delphi自己的TTreeView有这个属性,所以我想弄个新控件(一个派生类)同时继承TTreeView和RealICQContacterTreeView   可以吗? 如果可行 类结构如何写?谢谢

解决方案 »

  1.   

    不可以,因为Delphi类继承只支持单继承不支持多继承。
      

  2.   

    不可以的, delphi想继承两个基类的唯一方法貌似 是以接口式
      

  3.   

    Delphi的多重继承只能使用接口实现,否则就别想了。
      

  4.   

    控件代码:http://blog.csdn.net/tongtianxiao/archive/2011/01/17/6147077.aspx大家看看如何给他加多选属性 谢谢
      

  5.   

    抛开多重继承
    你确定TRealICQContacterTreeView跟TTreeView和有关系么?
    在控件行为上
    TRealICQContacterTreeView有a,b,c的行为
    TTreeView有d,e,f的行为--------------
    不表示你继承下来的新控件就有a,b,c,d,e,f的行为啊?
    ===========================
    你可以考虑接口
    继承TRealICQContacterTreeView;实现定义的接口ITreeView接口的实现ITreeView用适配器模式,适配TTreeView
      

  6.   

    可以具体教教我吗?如果在TRealICQContacterTreeView里直接修改 添加“start+方向键”多选dode模块啊? 教教我..
      

  7.   

    interfacetype  TA = class
      public
        procedure F1;
      end;  TB = class
      public
        procedure F2;
      end;  TC = class(TA{继承A})
      private
        B: TB;{托管B}
      public
        construction Create;
        destruction Destroy; override;
        procedure F2;
      end;implementionprocedure TA.F1;
    begin
      ShowMessage('Call F1');
    end;procedure TB.F2;
    begin
      ShowMessage('Call F2');
    end;construction TC.Create;
    begin
      B := TB.Create;
    end;destruction TC.Destroy;
    begin
      B.Free;
    end;procedure TC.F2;
    begin
      B.F2;
    end;end.
    以上手写的可能有失误请谅解。
      

  8.   

    楼上正解IB = interface //接口
    public
      procedure F2; virtual;stdcall;abstract;
    end;TC = class(TA{继承A},IB{实现接口})
      //... ...
      procedure F2;
      

  9.   

    适配器模式是指:你插座上只有3孔的插口,但你电器插头是2个脚的.那么你得买一个适配器,将3孔的插口转换成2孔的插口,才能提供给你的电器使用.
    TFaucet3 = class //3孔的插座
    public
      procedure action(fireline: integer; zeroline: integer; terra: integer);//3孔插口
    end;IFaucet2 = class //2孔插座的接口
    public
      procedure action(fireline: integer; zeroline: integer);virtual;abstract;//2孔插口TFaucet2Adapter = class(IFaucet2) //2孔插座的适配器,实现IFaucet2接口
    public
      procedure action(fireline: integer; zeroline: integer); override; //2孔插口
    private
      FFaucet3: TFaucet3; //托管
    end;procedure TFaucet2Adapter.action(fireline: integer; zeroline: integer);
    begin
      FFaucet3.action(fireline, zeroline, 0);//将3孔插口转换为2孔插口,其中火线接火线,零线接零线,地线没有接
    end;
      

  10.   

    我现在困惑的是如何用TTreeView作为借口传递给TRealICQContacterTreeView,让TRealICQContacterTreeView具有TTreeView的MultiSelect和MultiSelectStyle 两个属性代码如何写?请大家赐教!谢谢
      

  11.   

    这种情况建议你去把TTreeView里的相关部分代码移植过来。
      

  12.   

    是可以多继承的。
    TA=class(TB,TC)
    //TA class define
    end;这样就行了。