用RTTI方法获取组件属性的类
2008-11-27 19:46
288 查看
最近在写脚本生成,所以用到了RTTI的系列方法,记载记之。
class function TSomeClass.GetCtmWnd(Component: TComponent): TPersistent;
var
PropList: PPropList;
ClassTypeInfo: PTypeInfo;
classTypeData: PTypeData;
vSize: integer;
vPropName: string;
vObject: TObject;
i: integer;
begin
result := nil;
ClassTypeInfo := Component.ClassInfo;
ClassTypeData := GetTypeData(ClassTypeInfo);
if ClassTypeData.PropCount <> 0 then
begin
vSize := SizeOf(PPropInfo) * ClassTypeData.PropCount;
GetMem(PropList, vSize);
try
GetPropInfos(Component.ClassInfo, PropList);
for i := 0 to ClassTypeData.PropCount - 1 do
begin
if PropList[i]^.PropType^.Kind = tkClass then
begin
vPropName := PropList[i]^.Name;
vObject := GetObjectProp(Component, vPropName);
if vObject is TPersistent then
begin
result := TPersistent(vObject);
break;
end;
end;
end;
finally
FreeMem(PropList, vSize);
end;
end;
end;
class function TSomeClass.GetCtmWnd(Component: TComponent): TPersistent;
var
PropList: PPropList;
ClassTypeInfo: PTypeInfo;
classTypeData: PTypeData;
vSize: integer;
vPropName: string;
vObject: TObject;
i: integer;
begin
result := nil;
ClassTypeInfo := Component.ClassInfo;
ClassTypeData := GetTypeData(ClassTypeInfo);
if ClassTypeData.PropCount <> 0 then
begin
vSize := SizeOf(PPropInfo) * ClassTypeData.PropCount;
GetMem(PropList, vSize);
try
GetPropInfos(Component.ClassInfo, PropList);
for i := 0 to ClassTypeData.PropCount - 1 do
begin
if PropList[i]^.PropType^.Kind = tkClass then
begin
vPropName := PropList[i]^.Name;
vObject := GetObjectProp(Component, vPropName);
if vObject is TPersistent then
begin
result := TPersistent(vObject);
break;
end;
end;
end;
finally
FreeMem(PropList, vSize);
end;
end;
end;
相关文章推荐
- UGUI组件获取及属性设置方法
- extjs中超级厉害获取组件的方法Ext.ComponentQuery.query(),根据组件类型(xtype属性)获取组件。
- jquery easyui中获取各组件属性的方法
- ExtJs--05--给window组件添加功能条以及子组件获取上级或下级组件的属性和方法
- ExtJs--05--给window组件加入功能条以及子组件获取上级或下级组件的属性和方法
- Rtti单元(1)获取类的方法、属性、字段的列表
- rtti获取类的字段和属性和方法
- 关于类的入门例子(9): 获取对象的 RTTI 属性与事件的函数
- JQuery中6种根据属性或属性值获得元素获取方法
- JS获取网页图片name属性的方法
- [转载]Microsoft.XMLHttp组件的属性方法
- 测试 java反射Reflection中 获取 类属性、方法、构造方法及 调用类方法改变 对象属性
- ASP.net获取当前url各种属性(文件名、参数、域名 等)的方法
- 获取手机屏幕DisplayMetrics属性方法
- ios获取未知类所有属性和方法
- ASP.net获取当前网址url各种属性(文件名、参数、域名 等)的方法-转
- Draggable(拖动)组件 属性、事件、方法
- object-c 动态获取属性名和执行方法
- vue.js2.0点击获取自己的属性和jquery方法
- Java中获取系统属性的方法