我正在实现一个样板功能——允许用户 TLabel
在运行时更改某些组件的描述——比如 s。例如
TFooClass = Class ( TBaseClass)
Label : Tlabel;
...
End;
Var FooClass : TFooClass;
...
在设计时,标签的标题属性值是“名字”,当应用程序运行时,有一个功能允许用户将标题值更改为“其他名称”。一旦更改,FooClass 类实例的标签标题将立即更新。
现在的问题是,如果用户出于某种原因想要恢复到say 'First Name' 的设计时间值,这似乎是不可能的。
我可以使用 RTTIContext 方法和所有其他方法,但归根结底,我似乎需要该类的实例来更改值,并且由于这已经被更改了 - 我似乎遇到了障碍绕过它。
我的问题是——有没有办法在不实例化类的情况下将旧的 RTTI 方法或新的 RTTIContext 东西用于类成员的属性——即从 ClassType 定义中获取属性。
这是我尝试这样做的代码片段:
c : TRttiContext;
z : TRttiInstanceType;
w : TRttiProperty;
Aform : Tform;
....
Begin
.....
Aform := Tform(FooClass);
for vCount := 0 to AForm.ComponentCount-1 do begin
vDummyComponent := AForm.Components[vCount];
if IsPublishedProp(vDummyComponent,'Caption') then begin
c := TRttiContext.Create;
try
z := (c.GetType(vDummyComponent.ClassInfo) as TRttiInstanceType);
w := z.GetProperty('Caption');
if w <> nil then
Values[vOffset, 1] := w.GetValue(vDummyComponent.ClassType).AsString
.....
.....
....
....
我收到各种各样的错误,任何帮助将不胜感激。