gpt4 book ai didi

delphi - 对象的属性列表

转载 作者:行者123 更新时间:2023-12-03 15:44:54 26 4
gpt4 key购买 nike

如何获取非组件对象的属性列表(在运行时)。就像网格单元一样,它有自己的属性(字体、对齐等)。

AdvStringGrid、AliGrid 或 Bergs NxGrid 等网格。

最佳答案

您所要求的内容需要访问对象的 RTTI(运行时类型信息)。

如果您使用的是 Delphi 2009 或更早版本,则 RTTI 仅公开已发布的属性和已发布的方法(即事件处理程序)。看GetPropInfos()GetPropList() System.TypInfo 中的功能单元。它们为您提供了指向 TPropInfo 的指针数组。记录,每项属性(property)一份。 TPropInfo 有一个 Name 成员(除其他外)。

uses
TypInfo;

var
PropList: PPropList;
PropCount, I: Integer;
begin
PropCount := GetPropList(SomeObject, PropList);
try
for I := 0 to PropCount-1 do
begin
// use PropList[I]^ as needed...
ShowMessage(PropList[I].Name);
end;
finally
FreeMem(PropList);
end;
end;

请注意,这种 RTTI 仅适用于从 TPercient 派生的类,或者具有 {M+} 的类。应用编译器指令(TPercient 执行此操作)。

如果您使用的是 Delphi 2010 或更高版本,则所有属性、方法和数据成员都由扩展 RTTI 公开,无论其可见性如何。看TRttiContext记录,以及TRttiTypeTRttiProperty类,在 System.Rtti单元。有关更多详细信息,请参阅 Embarcadero 的文档:Working with RTTI .

uses
System.Rtti;

var
Ctx: TRttiContext;
Typ: TRttiType;
Prop: TRttiProperty;
begin
Typ := Ctx.GetType(SomeObject.ClassType);
for Prop in Typ.GetProperties do
begin
// use Prop as needed...
ShowMessage(Prop.Name);
end;
for Prop in Typ.GetIndexedProperties do
begin
// use Prop as needed...
ShowMessage(Prop.Name);
end;
end;

关于delphi - 对象的属性列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29424176/

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