码迷,mamicode.com
首页 > Windows程序 > 详细

Delphi XE----Rtti单元一(TRttiContext)

时间:2020-05-03 14:19:48      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:send   proc   RoCE   format   rtt   length   name   png   get   

技术图片

 

 

通过 Rtti 单元的 TRttiContext(是个 record), 可以方便地获取类的方法、属性、字段的列表.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

uses
  System.Rtti;

//TRttiContext.GetTypes
procedure TForm1.Button1Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
begin
  Memo1.Clear;
  for t in ctx.GetTypes do
    Memo1.Lines.Add(t.Name);
end;

//获取 TButton 类的方法
procedure TForm1.Button2Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  m: TRttiMethod;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);
  //for m in t.GetMethods do Memo1.Lines.Add(m.Name);
  for m in t.GetMethods do
    Memo1.Lines.Add(m.ToString);
end;

//获取 TButton 类的属性
procedure TForm1.Button3Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  p: TRttiProperty;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);
  //for p in t.GetProperties do Memo1.Lines.Add(p.Name);
  for p in t.GetProperties do
    Memo1.Lines.Add(p.ToString);

end;


//获取 TButton 类的字段
procedure TForm1.Button4Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  f: TRttiField;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);
  //for f in t.GetFields do Memo1.Lines.Add(f.Name);
  for f in t.GetFields do
    Memo1.Lines.Add(f.ToString);
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  ms: TArray<TRttiMethod>;
  ps: TArray<TRttiProperty>;
  fs: TArray<TRttiField>;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);

  ms := t.GetMethods;
  ps := t.GetProperties;
  fs := t.GetFields;

  Memo1.Lines.Add(Format(%s 类共有 %d 个方法, [t.Name, Length(ms)]));
  Memo1.Lines.Add(Format(%s 类共有 %d 个属性, [t.Name, Length(ps)]));
  Memo1.Lines.Add(Format(%s 类共有 %d 个字段, [t.Name, Length(fs)]));
end;

 

Delphi XE----Rtti单元一(TRttiContext)

标签:send   proc   RoCE   format   rtt   length   name   png   get   

原文地址:https://www.cnblogs.com/redhat588/p/12821742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!