如何在 Delphi 中获取指向属性的指针?

mccptt67  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(140)

我想要一个指向TEdit.Text的指针,但无论我如何表达, Delphi 坚持E2036 Variable required

ztigrdn8

ztigrdn81#

没有指向属性的指针。特别是像TEdit.Text这样的属性,它使用getter/setter方法,而不是由物理变量支持。
如果需要动态访问属性,请使用RTTI。
使用旧版System.TypInfo单元的RTTI,您可以使用GetPropInfo()获取TEdit.Text属性的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()读取/写入其值。

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');

相关问题