打开APP
userphoto
未登录

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

开通VIP
Delphi 2010 新增功能之: Rtti 单元(2)

通过 Rtti 还能够调用一个类的方法, 也能读取或设置其属性值.

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;type  TForm1 = class(TForm)    Button1: TButton;    Button2: TButton;    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);  end{自定义的类}  TMyClass = class(TComponent)  public    procedure msg(const str: string);    function Add(const a,b: Integer): Integer;  end;var  Form1: TForm1;implementation{$R *.dfm}uses Rtti;{ MyClass 类的实现 -----------------------------------------------------------}procedure TMyClass.msg(const str: string);begin  MessageDlg(str, mtInformation, [mbYes], 0);end;function TMyClass.Add(const a, b: Integer): Integer;begin  Result := a + b;end;//通过 Rtti 的手段使用 TMyClass 类的方法 --------------------------------------procedure TForm1.Button1Click(Sender: TObject);var  obj: TMyClass;  t: TRttiType;  m1,m2: TRttiMethod;  r: TValue; //TRttiMethod.Invoke 的返回类型begin  t := TRttiContext.Create.GetType(TMyClass);  {获取 TMyClass 类的两个方法}  m1 := t.GetMethod('msg'); {procedure}  m2 := t.GetMethod('Add'); {function}  obj := TMyClass.Create(Self); {调用需要依赖一个已存在的对象}  {调用 msg 过程}  m1.Invoke(obj, ['Delphi 2010']); {将弹出信息框}  {调用 Add 函数}  r := m2.Invoke(obj, [1, 2]); {其返回值是个 TValue 类型的结构}  ShowMessage(IntToStr(r.AsInteger)); {3}  obj.Free;end;//通过 Rtti 的手段修改并获取 TMyClass 类的属性 --------------------------------procedure TForm1.Button2Click(Sender: TObject);var  obj: TMyClass;  t: TRttiType;  p: TRttiProperty;  r: TValue;begin  obj := TMyClass.Create(Self);  t := TRttiContext.Create.GetType(TMyClass);  p := t.GetProperty('Name');  p.SetValue(obj, 'NewName');  r := p.GetValue(obj);  ShowMessage(r.AsString); {NewName}  obj.Free;end;end.

回复下面的问题:如何设置枚举值:

procedure TForm1.Button3Click(Sender: TObject);var  t: TRttiType;  p: TRttiProperty;  r: TValue;begin  t := TRttiContext.Create.GetType(TButton);  p := t.GetProperty('Align');  p.SetValue(Button1, TValue.FromOrdinal(TypeInfo(TAlign), Ord(alLeft)));  r := p.GetValue(Button1);  ShowMessage(IntToStr(r.AsOrdinal)); {3}end;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Delphi 的接口
如何用Delphi在TWebBrowser中调用JavaScript
设计模式之singleton
《Mastering Delphi 6》学习笔记之四
碧水航工作室
Delphi中的消息截获(六种方法:Hook,SubClass,Override WndProc,Message Handler,RTTI,Form1.WindowProc:=@myfun)good
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服