Ich versuche,
RTTI unter XE zu verstehen und zu nutzen.
Ich habe eine
Klasse TTest
mit den Propertys
S: String
und
I: Integer
;
Nun möchte ich mit
SetString(T, 'S', 'Text')
und analog
SetInteger(T, 'I', 100)
Werte zuweisen:
Delphi-Quellcode:
procedure SetString(T: TTest; PropName: String; Value: String);
var
Context: TRttiContext;
ClassInfo: TRttiType;
PropInfo: TRttiProperty;
PropValue: TValue;
begin
if not Assigned(T) then
Exit;
Context := TRttiContext.Create;
ClassInfo := Context.GetType(T.ClassType);
PropInfo := ClassInfo.GetProperty(PropName);
if Assigned(PropInfo) then
begin
{
so könnte man den Wert auslesen:
PropValue := PropInfo.GetValue(T);
if PropValue.Kind = tkString then
Result := PropValue.AsString
wie kann ich einen Wert schreiben???
im Grunde brauche ich so etwas wie T.PropertyByName('PropName').AsString := Value
}
end;
context.Free;
end;
procedure SetInteger(T: TTest; PropName: String; Value: Integer);
...Variante mit Integer
Die
Hilfe erscheint mir unvollständig, da dort doch keine Objekt-Instanz genutzt wird!?
Weiß jemand Rat?