搜索未果,只好再次请教大家。在派生类中能否将父类中已published或public的属性(property)给屏蔽调,就是不让其出现在属性浏览器中,而且也不能通过代码调用。
如果是要通过重新声明一个来替换调父类的相应方法,那我实现组件的过程中如何调用父类的相应方法(我只是想对用户隐藏该属性),但是我自己需要用到该属性。请问大家我如何实现?

解决方案 »

  1.   

    北京骎露科技有限责任公司(简称北京骎露)位于海淀区高新技术科技园区,主要从事输入法的开发与研究,并涉足研发国际领先的中文输入技术。
    招聘高级软件工程师1名!
    要求如下: 
    1、 本科以上学历、高级软件工程师
    2、 精C、C++语言和Windows编程
    待遇
    年薪20万,其它待遇面议
    另::有意者请带简历来我公司面试!北京骎露科技有限责任公司
    网  址:www.xinlo.com
    电  话:  010-80634884    010-68403196   
    传  真:  010-68403198   
    Q   Q :  286809529  
    E mail :   [email protected] 
    地  址:  北京市海淀区西三环北路21号久凌大厦北楼805    
    附近车站:为公桥、魏公村西口
      

  2.   

    To: ysai(所有真的都是假的真,所有假的都是真的假)那从最基础的服务到各个属性,工作量有些太大了吧,只为一个组件而彻底从OBJECT类从新继承下来,做法有些极端吧,而且也不符合面向对象的精神啊。
      

  3.   

    ysai说的是正确的。
    public或published的属性不能被隐藏,只能包装。另一个方法是看看是否可以直接从其父类继承,很多VCL中的类都可以这样继承。例如,可以从TCustomTreeView而不是TTreeView继承,就可以有选择性地发布一些属性了。
      

  4.   

    没法"屏蔽掉",但可以"覆盖"。你可以重新声明该属性的get,set方法。"那我实现组件的过程中如何调用父类的相应方法(我只是想对用户隐藏该属性),但是我自己需要用到该属性"
    用inherited关键字即可。例:
      TMyButton = class(TButton)
      private
        procedure SetWidth(const Value: integer);
        function GetWidth: integer;
      published
        property Width:integer read GetWidth write SetWidth;
      end;
    ...
    function TMyButton.GetWidth: integer;
    begin
      result := inherited Width;
    end;procedure TMyButton.SetWidth(const Value: integer);
    begin
      inherited Width := Value ;
      showmessage(inttostr(value));
    end;
      

  5.   

    VCL基类一般都是把属性放到protected部分
    又继承类公布属性
    参考:TCustomEdit->TEdit看来手术只能在父类动了
      

  6.   

    ok, 谢谢大家,我明白了,不过现在让我郁闷的是,我这个组件的实现方法是这样的TBrxDrawGrid = class(TGraphicControl)
      private
        FAlign: TAlign;
        FContainer: TScrollBox;
        。其中这个FContainer: TScrollBox;
    我是用来作本类的容器的,Create方法是这样写的
    constructor TBrxDrawGrid.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FContainer := TScrollBox.Create(AOwner);
      FContainer.Parent := TWinControl(AOwner);
      FContainer.Align := alNone;
      Parent := FContainer;
    。。当作为空间托到窗体上时分家成两个控件了,但是在注册成控件之前动态创建测试却是正常的。想不明白为什么?还有这种用自己一个变量元素作为自己容器的方法对不对,可取吗,要是可以,我的构造函数是否存在问题呢?