enum プロパティに文字列として書き込む方法は知っています。
変数 フォーム: Tフォーム; LContext: TRttiContext; LType: TRttiType; LProperty: TRttiProperty; PropTypeInfo: PTypeInfo; 値: TValue; 始める フォーム := TForm.Create(NIL); LContext:= TRttiContext.Create; LType := LContext.GetType(Form.ClassType); LType.GetProperties の LProperty の場合 LProperty.Name = 'FormStyle' の場合 始める PropTypeInfo := LProperty.PropertyType.Handle; TValue.Make(GetEnumValue(PropTypeInfo, 'fsStayOnTop'), PropTypeInfo, Value); LProperty.SetValue(フォーム、値); 終わり; writeln(Integer(Form.FormStyle)); // = 3
しかし、文字列ではなく整数 (fsStayOnTop の場合は 3 など) を持っている場合に値を設定する方法と、そのプロパティから読み取るが文字列を返さない方法 (Value.AsString で動作する) は?
値:= LProperty.GetValue(Obj); writeln(Value.AsString); // fsStayOnTop を返しますが、文字列ではなく整数が必要です writeln(Value.AsInteger); // 失敗