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

haixj 2003-09-12 02:29:54
如何為form自定義屬性并使其在屬性窗口中是可見并可修改的?
...全文
94 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
haixj 2003-09-19
  • 打赏
  • 举报
回复
TO: INeedCa(缺钙)
不行我試過在form 中加屬性到Published中,發現派生類和本身都看不到,好像FORM是沒有published域的,是不是可以考慮從TCUSTOMFORM重新繼承并寫過呢?
FrameSniper 2003-09-19
  • 打赏
  • 举报
回复
To Cscentaur

我知道那上面有OTA的东西!但没有仔细看过!学习学习....
feng93017 2003-09-19
  • 打赏
  • 举报
回复
不必这么复杂,直接使用窗体继承就可以了。嘿嘿!
cscentaur 2003-09-17
  • 打赏
  • 举报
回复
代码很长的,不过在Delphi5开发人员指南》的第26章使用Delphi Open Tools API中有很具体的代码,照抄再加上点自己要的东东就可以了,不要跟我说你没有这书哦。
FrameSniper 2003-09-15
  • 打赏
  • 举报
回复
Sorry,没有注意,这里是个窗体,我想成控件了!

那你用OTA又是如何实现的呢?可以说说详细过程吗?
cscentaur 2003-09-15
  • 打赏
  • 举报
回复
哦,这样吗?不知楼上的老兄试过了没有,反正我是没试成功,因为在Palette上是不可能建个Form出来的吧,因为IDE不知道如何在另一个Form中显示它。反正我不用Open Tools API的情况下是没成功过。
FrameSniper 2003-09-15
  • 打赏
  • 举报
回复
这个和OTA没有多大关系吧,要想让属性在Object Inspector里面显示,就需要把属性定义为公布的,因为Delphi为公布的属性保存RTTI信息!

所有的RTTI信息都是从TPersistent类开始进行扩展的,因为TPersistent类是定义在{$M+}的条件下。所以既然已经TForm类固定不可变,你只能派生一个TForm的子类,然后给它定义个额外的公布的属性,最后注册到Palette里面就可以了!
cscentaur 2003-09-15
  • 打赏
  • 举报
回复
关于在Form中自定义属性并可以在属性窗口中访问的问题,你可以看《Delphi5开发人员指南》的第26章使用Delphi Open Tools API,在本章中,你将看到如何自己定义一个窗体并在IDE中注册,代码有点规模,你自己去看吧。
INeedCa 2003-09-15
  • 打赏
  • 举报
回复
定义到Published域中就可以在PROPERTY INSPECTOR中访问
wdsimon 2003-09-12
  • 打赏
  • 举报
回复
从Tform继承,然后添加新属性就可以了啊
如下为form1添加一个新属性str,并初始化为'hello,world!',然后form1的caption等于属性str
unit Unit1;

interface

uses
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.
haixj 2003-09-12
  • 打赏
  • 举报
回复
UP
haixj 2003-09-12
  • 打赏
  • 举报
回复
怎麼沒人回答啊!!!
就是form自定義的屬性在派生後的FORM中的PROPERTY INSPECTOR中看不到,但在代碼中可以訪問.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧