如何访问父类属性自定义构件TMyTreeView 继承于TTreeView,设想其StateImages在构件创建时建立,然后不允许再修改,如何实现?在TMyTreeView中定义了StateImages属性,如何访问其父类的属性(StateImages)(父类用什么表示,base?)?

解决方案 »

  1.   

    把自己转化为父类再访问就可以了
    TTreeView(MyTreeView).StateImages
      

  2.   

    换了一种写法:基于TEdit:初始时设置Text,然后就不许改了,没好用。
    ========================
    unit Unit2;interfaceuses
      StdCtrls, Controls, Classes;type
      TMyEdit = class (TEdit)
      private
        FText:string;    procedure SetText(s:string);
      protected
        procedure CreateParams(var Params: TCreateParams); override;
        constructor Create(AOwner: TComponent); override;
      published
        property Text:string read FText write SetText;
      end;
    implementationprocedure TMyEdit.SetText(s: string);
    begin
      TEdit(self).Text:=s;
      FText:=s;
    end;constructor TMyEdit.Create(AOwner: TComponent);
    begin
      inherited;
      TEdit(self).Text:='asd';
      Text:='123123123';
    end;procedure TMyEdit.CreateParams(var Params: TCreateParams);
    begin
      inherited;// Create(nil);//  TEdit(self).Text:='asd';
    end;end.=================================
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Unit2;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      edit:TMyEdit;
    begin
      edit:=TMyEdit.Create(self);
      edit.Parent:=self;
      edit.Left:=0;
      edit.Top:=0;
    //  edit.Text:='ASDASDASD';end;end.
      

  3.   

    直接self.Text就可以,继承后是拥有父类属性的
      

  4.   

    其它Delphi有的语法,有点怪,你的这种方法,不是每次都有效如
    type
      TA = class
      public
        procedure A();//不是虚拟方法
      end;procedure TA.A();
    begin
      ShowMessage('TA.A()');
    end;
    ...  
      TB = class
      public
        procedure A();//抢占(或者是“摭挡”)的父类的实现,请问这里如何访问父类的实现?
      end;procedure TB.A();
    begin
      ShowMessage('TB.A()');
    end;
      

  5.   

    我的设想是TMyEdit不对外提供Text属性,或Text属性不可修改。
    但TMyEdit在初始化时还要对Text赋初始值。隐藏Text属性可能不太现实,所以只能对外提供一个只读属性,但本身怎么赋初始值?