http://www.cnblogs.com/hnxxcxg/archive/2013/03/02/2940565.html

rtti读取和设置属性

 
编辑器通过 Rtti 还能够调用一个类的方法, 也能读取或设置其属性值. -------------------------------------------------------------------------------- unit Unit1; interface uses 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; 加载中...
 

rtti读取和设置属性的更多相关文章

  1. C#反射技术的简单操作(读取和设置类的属性)

    public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...

  2. C#反射读取和设置类的属性

    C#反射技术的简单操作(读取和设置类的属性) http://www.cnblogs.com/william-lin/archive/2013/06/05/3118233.html 泛型方法通过反射创建 ...

  3. agruments应用——求出函数参数的总合&&css函数——设置/读取对象的属性&&当前输入框高亮显

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. //读取配置文件(属性文件)的工具类-ConfigManager

    package com.pb.news.util; import java.io.IOException;import java.io.InputStream;import java.sql.Resu ...

  5. ServiceStack NetCoreAppSettings 配置文件读取和设置

    假设Node和npm已经安装 npm install -g @servicestack/cli 执行命令dotnet-new selfhost SSHost 这样就创建了ServiceStack的控制 ...

  6. 28、从零写UVC驱动之实现设置属性

    1. 先看APP以确定需要实现哪些接口xawtv.c: grabber_scan ng_vid_open//根据链表的设置和读取可以在xawtv中找到是调用v4l2_driver.open v4l2_ ...

  7. 自定义控件设置属性并实时展现并预览在xib中

    关键字: // @IBDesignable:实时看到xib设置后的效果 // @IBInspectable:给xib提供设置属性,可以xib中看到此属性 场景: 自定义一个UITextField,并提 ...

  8. Android读取自定义View属性

    Android读取自定义View属性 attrs.xml : <?xml version="1.0" encoding="utf-8"?> < ...

  9. DELPHI下读取与设置系统时钟

    在DELPHI下读取与设置系统时钟 很多朋友都想在自己的程序中显示系统时间 这在DELPHI中十分容易 利用DateToStr(Date)及TimeToStr(Time)函数即可实现. 二者的函数原型 ...

随机推荐

  1. 混合加密算法(RSA和DES)

    一.混合加密的理由 a.前面提及了RSA加解密算法和DES加解密算法这两种加解密算法,由于随着计算机系统能力的不断发展,DES的安全性比它刚出现时会弱得多,追溯历史破解DES的案例层出不穷,一台实际的 ...

  2. PC端网站微信扫码登录

    需求分析:用户通过扫描我们网页的二维码,如果已经绑定我们平台的账户,即成功进入首页,否则提示先绑定个人微信账号. 1.绑定微信账号:是通过关注微信公众号实现绑定个人微信账号.首先通过后台接口获取到ti ...

  3. 初学Git——命令总结

    首先,感谢廖雪峰老师制作的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0 ...

  4. 四、续绑定SignaIR的用户管理-(添加好友和消息盒子)

    一.聊天消息表(普通消息,申请消息,群聊消息) CREATE TABLE MSG_INFO ( MSG_Id INT PRIMARY KEY AUTO_INCREMENT, -- 消息标识 MSG_T ...

  5. docker持久化之存储卷

         启动时敲:   docker run -it -v /var/mydata:/abc myos   #前面写真实机里的文件夹,冒号后面写docker里面的文件夹,最后写镜像名 (可以同时挂载 ...

  6. java Character类源码分析

    一.使用 构建Character对象: public class CharTest { public static void main(String[] args) { Character c1 = ...

  7. pycharm设置SDK

    1.一看到这个提示,就知道Pycharm中尚未配置Python解释器,此时不用慌,并不是Pycharm没有安装成功,而是因为有个配置尚未完成,只需要配置好Python解释器之后,一切都会正常.其实Py ...

  8. 【JavaScript】 模拟JQuery的连续调用函数

    连续调用,了解调用主体 var zhangsan = { smoke: function () { console.log("Smoking..."); return this; ...

  9. iOS 推送角标解决方案

    在App启动时:didFinishLaunchingWithOptions 方法中:application.applicationIconBadgeNumber = ; //角标清零 在读消息时: a ...

  10. HDU 4027 Can you answer these queries? (线段树成段更新 && 开根操作 && 规律)

    题意 : 给你N个数以及M个操作,操作分两类,第一种输入 "0 l r" 表示将区间[l,r]里的每个数都开根号.第二种输入"1 l r",表示查询区间[l,r ...