如何在运行时创建属性编辑器并使用?(100分)

  • 主题发起人 主题发起人 wgqsoft
  • 开始时间 开始时间
等你知道了,估计Delphi也已经从地球上消失了。。。(无恶意。。。)

有些东西不知道也就不知道了。。。
 
不能创建的,除非你把delphi的设计时包都打包出来,然后运行出delphi的ide执行环境,不然就自己写。
 
还是不死心!
 
你看看FastReport公司的FastScript的Demo就明白了
 
我自己写过一个仿delphi,里面创建是这样的:
GetClassPropertiesGrid(tmpcompon,Gridproperty);
//GetClassPropertiesGrid函数的第一个参数是你的组件,
比如edit1,Gridproperty是你显示的StringGrid,我是显示在StringGrid当中.
你只要知道rtti,编程还是很好写的.
如果需要完整的程序:qq:153109


procedure Tform1.GetClassPropertiesGrid(AClass: TObject;var AStrings: TStringGrid);
var
PropList: PPropList;
ClassTypeInfo: PTypeInfo;
ClassTypeData: PTypeData;
i,tmpint: integer;
tmpstr:string;
tmpobj:Tobject;
begin
ClassTypeInfo := AClass.ClassInfo;
ClassTypeData := GetTypeData(ClassTypeInfo);
if ClassTypeData.PropCount <> 0 then
begin
GetMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
try
GetPropInfos(AClass.ClassInfo, PropList);
AStrings.RowCount:=ClassTypeData.PropCount;
tmpint:=0;
for i := 0 to ClassTypeData.PropCount - 1 do
begin
tmpstr:='';
case PropList^.PropType^.Kind of
tkMethod:continue;
tkInteger,tkInt64,tkEnumeration:tmpstr:=GetEnumProp(AClass,PropList^.Name);
tkFloat:tmpstr:=floattostr(GetFloatProp(AClass,PropList^.Name));
tkString,tkLString,tkWString:tmpstr:=GetStrProp(AClass,PropList^.Name);
tkClass:begin
tmpobj:=GetObjectProp(AClass,PropList^.Name);
if (tmpobj<>nil) then
begin
if (tmpobj is Tcomponent) then
tmpstr:=Tcomponent(tmpobj).Name
else
tmpstr:='('+Tcomponent(tmpobj).ClassName+')';
end;
end;
end;
AStrings.Cells[0,i]:=PropList^.Name;
if tmpstr<>'' then
AStrings.Cells[1,i]:=tmpstr;
inc(tmpint);
end;
AStrings.RowCount:=tmpint;
finally
FreeMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
end;
end;
end;
 
to dcsdcs
你这是获取组件的属性和方法,这个我已经实现,
我现在想知道的是如何创建Delphi中定义的属性编辑器。
例如: TPictureProperty
 
请看:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3440070
 
大家不要再给我发如何编写属性编辑器的回复了,这个我已经比较熟悉了,
我要的是在程序中创建属性编辑器的实例,并可以调用属性编辑器的 Edit 方法。

请大家一定要注意关键:创建属性编辑器的运行时实例!实例!实例!
大家千万不要将这个“实例”理解为:创建属性编辑器的例子,再说一遍是实例,
即运行时的实际存在的对象。
 
晕,你要实例,没问题啊
把你的属性编辑器控件扔在一个Form上,做全局热键F11
创建一个Form,指定属性编辑器要编辑的控件,然后show出来
 
没有答案,把分数给 Wolfding,以奖励它提供的组件包
 

Similar threads

后退
顶部