gpt4 book ai didi

delphi - 使用RTTI读取和写入枚举属性为Integer

转载 作者:行者123 更新时间:2023-12-03 18:58:22 26 4
gpt4 key购买 nike

我确实知道如何以字符串形式写入枚举属性:


变种
形式:TForm;
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(Form,Value);
结束;

writeln(Integer(Form.FormStyle)); // = 3



但是如果我没有字符串而是整数(例如fsStayOnTop为3),如何设置值以及如何从该属性读取而不返回字符串(可以与Value.AsString一起使用)?


值:= LProperty.GetValue(Obj);
writeln(Value.AsString); //返回fsStayOnTop,但我不需要字符串,我需要整数
writeln(Value.AsInteger); //失败

最佳答案

按照如下顺序创建TValue

Value := TValue.FromOrdinal(PropTypeInfo, OrdinalValue);


另一方面,要阅读序数,请执行以下操作:

OrdinalValue := Value.AsOrdinal;

关于delphi - 使用RTTI读取和写入枚举属性为Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32592647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com