请问如何将在设计期动态创建的控件的属性注册进属性编辑器?急!谢谢!(100分)

  • 主题发起人 主题发起人 simontown
  • 开始时间 开始时间
S

simontown

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个控件,可以在设计期载入一个配置文件,然后根据配置文件动态创建其他的控件,以上都是在设计期发生的。
但是动态创建的控件,不能被编辑,和运行期一样,有人说需要将属性加入属性编辑器,但给的代码不全,有些关键地方没有。我目前写出来的就下面这些:
Count := GetPropList(Component.ClassInfo,tkProperties,nil);
Size := Count * SizeOf(Pointer);
FreeMem(PropList);
GetMem(PropList,Size);
Count := GetPropList(Component.ClassInfo,tkProperties,PropList);
for i := 0 to Count-1 do
begin
PropInfo := PropList^;
PropEdit := nil;
if IsPublishedProp(Component,PropInfo^.Name) then
begin
//这里,如果判断到是属性,怎么放进属性编辑器呢?
end;
end;
另外,还需要个TValueListEditor吧?这个是不是指IDE的属性编辑器?该怎么弄呢?
麻烦各位大哥指点一下!或者给个详细点的示例代码!不胜感激!分不多,只有100分了
我QQ 56385501,能加好友指点更感谢!^_^
 
http://www.codesearch.com.cn
中国最大得源代码搜索引擎
 
设计时动态建立的控制要属性编辑?就放一个控件呀!不然就在代码中设置属性。
 
不是用鼠标拖一个到窗体上
而是在代码中创建
 
其实完全没有必要吧,请看示例:
var fText:TEdit;
fText:=TEdit.Create(nil);
fText.Parent:=Panel1;
fText.Left:=0;
fText.Top:=0;
fText.Name:='TestText';
fText.Visible:=True;
多简单,这些属性你可以都存在数据库中,下次你直接调用就是
 
看来你们都没明白我的意思
你们自己写个控件,在设计期时再动态创建一个新控件,然后你会发现这个新控件和运行期是一样的,不能在属性编辑器里被编辑。
 
放在一个包内, 曰: 设计期包。
 
sLocalizableCategoryName = 'Localizable';
property ItemName_AppTitle: string Read AppTitle write SetAppTitle;
RegisterPropertyInCategory(sLocalizableCategoryName,'ItemName_AppTitle');
 
我觉得我有必要再补充一下问题,晕死~!居然没人懂我的意思!
首先,有一个配置文件(其实就是dfm格式文件),我的控件会读这个文件,然后把文件里的控件创建出来,创建出来后,当然应该能在属性编辑器里进行编辑,对吧?问题就在这,能被属性编辑器编辑的控件必须首先注册进入属性编辑器(注意:不是注册属性,而是注册属性编辑器!),所以,我的问题就是:如何注册?
PS:以上全部是在设计期,不涉及运行期
 
to dey-999
你写的好象是注册类别的吧?
 
你说的这种没试过!为什么要写个控件,还要动态创建其他的控件;
不过我想应该可以!但是
if IsPublishedProp(Component,PropInfo^.Name) then
begin
//这里,如果判断到是属性,怎么放进属性编辑器呢?
end;
不明白是什么意思!
“但是动态创建的控件,不能被编辑,和运行期一样”
即使是动态创建,那不就是运行期吗?怎么还和运行期一样?
你说的意思是不是你做的控件没有属性?还是属性没有下拉列表?
还是想在运行时加入一个可以编辑属性的窗口?
 
如果是创建的控件不能被修改属性,那么;
1、我建议不要用配置文件创建控件的一些相关数据
2、直接加入属性变量,在控件创建时对变量赋初始值
3、加入对变量读写的代码;
一定可以完成!
 
清新空气兄理解的意思终于和我的意思有点接近了~~汗~~~~~
我举个例子吧,一个ADOQuery,可以在里面自己新建Field,每个Field实际是一个单独的类,都有自己的属性和方法,而且可以在属性编辑器里进行更改。
我就要做个类似于这种的。我自己写的控件就是ADOQuery,动态创建的控件就是Field。
这下要再不清楚,我就要跳楼了……
 
你说的如果是colnms中的field的话;
那么就要做个类比如
TAx=class(父类)
...
相应的属性等;
再做你的控件类如
TMyADOQuery=Class(TADOQuery)
设置一个变量;
FAX:TAX;
在TMyADOQuery Create的时候创建FAx:=TAX.Create(self);
在对其FAX此变量操作即可;

给你看个贴
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3473595
 
如果你急需的话我给你个QQ:43170626
这个人前段时间我给他写了个控件!他也研究了控件编辑器的方法;现在他对编写控件应该很有心得!你可以问问他!
 
谢谢!
但是创建的子控件并不是我自己写的,而是一些标准的Delphi控件,比如TLable、TEdit等,而且不是由我的程序来控制属性,是创建后,由用户在属性编辑器里更改属性
 
留下Email我给你个例子,我以前做的
 
看一下Delphi6开发人员指南-->第12章12.3.3
注册新的属性编辑器
RegisterPropertyEditor
 
楼上的
不是注册属性类型,而是注册属性编辑器
 
PropertyEditor就是属性编辑器
详细的请看书370页
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部