打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Delphi类的入门例子(9): 获取对象的 RTTI 属性与事件的函数

Delphi类的入门例子(9): 获取对象的 RTTI 属性与事件的函数

时间:2011-12-12 万一

unit Unit1;

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, xmldom, XMLIntf, XMLBrokr, msxmldom, XMLDoc;
type
 TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  Memo1: TMemo;
  Memo2: TMemo;
  XMLDocument1: TXMLDocument;
  procedure Button1Click(Sender: TObject);
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
uses TypInfo; {获取类的信息, 需要这个单元}

//获取对象的 RTTI 属性与事件的函数

function GetPropertyAndEventList(obj: TObject; pList,eList: TStringList): Boolean;
var
 ClassTypeInfo: PTypeInfo; {类的信息结构指针}
 ClassDataInfo: PTypeData; {类的数据结构指针}
 propertyList : PPropList; {TPropInfo 是属性的数据结构;
               PPropList 是其指针;
               TPropList 是属性结构指针的列表数组;
               PPropList 是指向这个数组的指针}
 num : Integer;      {记录属性的总数}
 size: Integer;      {记录属性结构的大小}
 i: Integer;
begin
 ClassTypeInfo := obj.ClassInfo;       {先获取: 类的信息结构指针}
 ClassDataInfo := GetTypeData(ClassTypeInfo); {再获取: 类的数据结构指针}
 num := ClassDataInfo.PropCount;       {属性总数}
 size := SizeOf(TPropInfo);          {属性结构大小}
 GetMem(propertyList, size*num);       {给属性数组分配内存}
 GetPropInfos(ClassTypeInfo, propertyList);  {获取属性列表}
 for i := 0 to num - 1 do
 begin
  if propertyList[i].PropType^.Kind = tkMethod then {如果是事件; 事件也是属性吗, 给分出来}
   eList.Add(propertyList[i].Name)
  else
   pList.Add(propertyList[i].Name);
 end;
 pList.Sort; eList.Sort; {排序}
 FreeMem(propertyList); {释放属性数组的内存}
 Result := True;
end;

//测试

procedure TForm1.Button1Click(Sender: TObject);
var
 PL,EL: TStringList;
begin
 PL := TStringList.Create;
 EL := TStringList.Create;
 Memo1.Clear;
 Memo2.Clear;
 GetPropertyAndEventList(Self, PL, EL); {调用函数, 第一个参数是对象名}
 Memo1.Lines := PL;
 Memo2.Lines := EL;
 PL.Free;
 EL.Free;
end;

end.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
第二章 Delphi面向对象的编程方法(一)
delphi利用系统时间产生随机数的函数
delphi中怎么判断memo滚动条滑到底部
DELPHI的RTTI实现数据集的简单对象化
delphi memo 自动滚动到最底下
Pascal精要笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服