问题
I would like to access the following property using RTTI
MyComponent1.Property['variable'].SubProperty
I would like something like that:
var
Ctx: TRttiContext;
Typ: TRttiType;
SubTyp: TRttiType;
Prop: TRttiProperty;
SubProp: TRttiProperty;
begin
Ctx:= TRttiContext.Create;
Typ:= Ctx.GetType(MyComponent1.ClassInfo);
Prop:= Typ.GetProperty('Property['variable'].Subproperty') //not possible
Prop.SetValue(MyComponent1.Property['variable'],'500');
end;
Basically I want to access a subproperty of my component and I have only strings, so I cannot use Typ:=Ctx.GetType(MyComponent1.ClassInfo)
and then Prop:=Typ.GetProperty('Property['variable'].Subproperty')
this is not allowed. Attention in the fact that there is a paramenter for the first property. I guess I have to obtain this first property and then somehow the second property, because I cannot use this property1"."property2
Does anyone know how to do that?
回答1:
Index properties as all other properties (except direct references to object fields) just a shortcut to getXXX
and setXXX
methods.
Try that way:
Get all indexed properties of
Ctx.GetType(MyComponent1.ClassInfo)
with GetDeclaredIndexedProperties or GetIndexedPropertiesSearch desired
Property
in returned array of TRttiIndexedProperty instances.Get write method description object from WriteMethod property of
TRttiIndexedProperty
object found.Get method parameters description if you need it with GetParameters call.
Call Invoke method of method description object with constructed parameter(s) list to set a property value.
Update
This works only in Delphi versions from XE2 and above.
In previous versions indexed properties can be adopted for RTTI only using things like discussed in this question.
来源:https://stackoverflow.com/questions/16948114/get-a-sub-property-of-a-component-in-delphi-using-rtti