如何為form自定義屬性并使其在屬性窗口中是可見并可修改的?

解决方案 »

  1.   

    怎麼沒人回答啊!!!
    就是form自定義的屬性在派生後的FORM中的PROPERTY INSPECTOR中看不到,但在代碼中可以訪問.
      

  2.   

    从Tform继承,然后添加新属性就可以了啊
    如下为form1添加一个新属性str,并初始化为'hello,world!',然后form1的caption等于属性str
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      Tform2 = class(tform)//从tform继承,并添加属性str
        private
          fstr:string;
           constructor Create(AOwner: TComponent); override;//重载Create,为新属性赋初值。
      
        public
          property str:string read fstr ;
      end;
      TForm1 = class(TForm2)//注意这里从TForm2继承;
        procedure FormCreate(Sender: TObject);//重载
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ Tform2 }constructor Tform2.Create(AOwner: TComponent);
    begin
      inherited;
      fstr:='hello,world!';
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      form1.Caption:=form1.str;
    end;end.
      

  3.   

    定义到Published域中就可以在PROPERTY INSPECTOR中访问
      

  4.   

    关于在Form中自定义属性并可以在属性窗口中访问的问题,你可以看《Delphi5开发人员指南》的第26章使用Delphi Open Tools API,在本章中,你将看到如何自己定义一个窗体并在IDE中注册,代码有点规模,你自己去看吧。
      

  5.   

    这个和OTA没有多大关系吧,要想让属性在Object Inspector里面显示,就需要把属性定义为公布的,因为Delphi为公布的属性保存RTTI信息!所有的RTTI信息都是从TPersistent类开始进行扩展的,因为TPersistent类是定义在{$M+}的条件下。所以既然已经TForm类固定不可变,你只能派生一个TForm的子类,然后给它定义个额外的公布的属性,最后注册到Palette里面就可以了!
      

  6.   

    哦,这样吗?不知楼上的老兄试过了没有,反正我是没试成功,因为在Palette上是不可能建个Form出来的吧,因为IDE不知道如何在另一个Form中显示它。反正我不用Open Tools API的情况下是没成功过。
      

  7.   

    Sorry,没有注意,这里是个窗体,我想成控件了!那你用OTA又是如何实现的呢?可以说说详细过程吗?
      

  8.   

    代码很长的,不过在Delphi5开发人员指南》的第26章使用Delphi Open Tools API中有很具体的代码,照抄再加上点自己要的东东就可以了,不要跟我说你没有这书哦。
      

  9.   

    TO: INeedCa(缺钙)  
    不行我試過在form 中加屬性到Published中,發現派生類和本身都看不到,好像FORM是沒有published域的,是不是可以考慮從TCUSTOMFORM重新繼承并寫過呢?
      

  10.   

    To Cscentaur  我知道那上面有OTA的东西!但没有仔细看过!学习学习....