我想要一个指向TEdit.Text的指针,但无论我如何表达, Delphi 坚持E2036 Variable required。
TEdit.Text
E2036 Variable required
ztigrdn81#
没有指向属性的指针。特别是像TEdit.Text这样的属性,它使用getter/setter方法,而不是由物理变量支持。如果需要动态访问属性,请使用RTTI。使用旧版System.TypInfo单元的RTTI,您可以使用GetPropInfo()获取TEdit.Text属性的PPropInfo指针,然后使用GetStrProp()和SetStrProp()函数读取/写入其值。
System.TypInfo
GetPropInfo()
PPropInfo
GetStrProp()
SetStrProp()
uses ..., TypInfo; var TextProp: PPropInfo; S: string; TextProp := GetPropInfo(Edit1.ClassType, 'Text'); ... S := GetStrProp(Edit1, TextProp); SetStrProp(Edit1, TextProp, S + ' hello');
字符串或者,使用较新的System.Rtti单元中的增强型RTTI,您可以使用TRttiContext.GetType()为TEdit获取TRttiType,然后使用TRttiType.GetProperty()为其Text属性获取TRttiProperty,然后使用TRttiProperty.GetValue()和TRttiProperty.SetValue()读取/写入其值。
System.Rtti
TRttiContext.GetType()
TEdit
TRttiType
TRttiType.GetProperty()
Text
TRttiProperty
TRttiProperty.GetValue()
TRttiProperty.SetValue()
uses ..., System.Rtti; var Ctx: TRttiContext; TextProp: TRttiProperty; S: string; TextProp := Ctx.GetType(Edit1.ClassType).GetProperty('Text'); ... S := TextProp.GetValue(Edit1); TextProp.SetValue(Edit1, S + ' hello');
型
1条答案
按热度按时间ztigrdn81#
没有指向属性的指针。特别是像
TEdit.Text
这样的属性,它使用getter/setter方法,而不是由物理变量支持。如果需要动态访问属性,请使用RTTI。
使用旧版
System.TypInfo
单元的RTTI,您可以使用GetPropInfo()
获取TEdit.Text
属性的PPropInfo
指针,然后使用GetStrProp()
和SetStrProp()
函数读取/写入其值。字符串
或者,使用较新的
System.Rtti
单元中的增强型RTTI,您可以使用TRttiContext.GetType()
为TEdit
获取TRttiType
,然后使用TRttiType.GetProperty()
为其Text
属性获取TRttiProperty
,然后使用TRttiProperty.GetValue()
和TRttiProperty.SetValue()
读取/写入其值。型