RTTI需要引用单元TypeInfo

至于RTTI的数据结构,大家可以参考TypeInfo单元的代码

看例子,先为大家介绍一下根据字符串找到属性,并且对其修改的例子

  • 根据属性字符串找到属性,并修改属性
  • GetPropInfo 函数用于获得属性的 RTTI 指针 PPropInfo。它有四种重载形式,后面三种重载的实现都是调用第一种形式。AKinds 参数用于限制属性的类型,如果得到的 PPropInfo 不属于指定的类型,则返回 nil。

    function GetPropInfo(TypeInfo: PTypeInfo; const PropName: string): PPropInfo;

    function GetPropInfo(Instance: TObject; const PropName: string;
        AKinds: TTypeKinds = []): PPropInfo;
      function GetPropInfo(AClass: TClass; const PropName: string;
        AKinds: TTypeKinds = []): PPropInfo;
      function GetPropInfo(TypeInfo: PTypeInfo; const PropName: string;
        AKinds: TTypeKinds): PPropInfo;

  • SetPropValue 函数用于设置任何类型的属性值。SetPropValue 的实现与 GetPropValue 类似。并且 SetPropValue 内部分析 Value 参数是否是字符串来设置枚举和集合类型的属性,所以不需要 PreferStrings 参数。
 
以下代码,循环修改窗体上的Button组件的Capiton
方法一:
procedure TForm1.SetCaption;
var
pInfo : PPropInfo;
i:integer;
begin
for i := to Self.ControlCount - do
begin
pInfo := GetPropInfo(Self.Controls[i],'Caption'); //GetPropInfo,根据'Caption'字符串,查找Caption属性
if pInfo <> nil then //如果有
TButton(Self.Controls[i]).Caption:= 'ABC'; //修改Capiton
end;
end;
方法二:
procedure TForm1.SetCaption;
var
pInfo : PPropInfo;
i:integer;
begin
for i := to Self.ControlCount - do
begin
pInfo := GetPropInfo(Self.Controls[i],'Caption');
if pInfo <> nil then
SetPropValue(Self.Controls[i],'Caption','ABC');
end;
end;

RTTI D7的更多相关文章

  1. Delphi里的RTTI与反射(举例换掉FOnChange)

    Delphi2010之后的RTTI做了很大休整,现在用起来很爽了哦.甚至可以获取某些类的内部私有单元,然后为其赋值!讲这个RTTI增强的,可以参考网上的多个博客内容,我列举一下:Delphi2010R ...

  2. Delphi 的RTTI机制浅探3(超长,很不错)

    转自:http://blog.sina.com.cn/s/blog_53d1e9210100uke4.html 目录========================================== ...

  3. C 语言Struct 实现运行类型识别 RTTI

    通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型.    (2)dynamic_cast: ...

  4. TLogger一个D7可用的轻量级日志

    今天调程序,要用到日志.XE7有Qlog,D7用什么 从网上找到了Logger,下载的原文是不支持D7的,不过也只是很少的地方不同,自己修改了下就可以用了 感谢原作者和红鱼的分享 unit Logge ...

  5. RTTI: dynamic_cast typeid

    dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或vo ...

  6. Java系列笔记(2) - Java RTTI和反射机制

    目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...

  7. RTTI

    RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   编辑本段RTTI介绍 RTTI提 ...

  8. RTTI 运行时类型识别 及异常处理

    RTTI   运行时类型识别 typeid  ------  dynamic_cast dynamic_cast 注意事项: 1.只能应用于指针和引用之间的转化 2.要转换的类型中必须包含虚函数 3. ...

  9. 【Java基础】RTTI与反射之Java

    一.引言 很多时候我们的程序可能需要在运行时识别对象和类的信息,比如多态就是基于运行时环境进行动态判断实际引用的对象.在运行时识别对象和类的信息主要有两种方式:1.RTTI,具体是Class对象,它假 ...

随机推荐

  1. Maven项目的结构分析

    上图为简单的Maven结构,其中用src/main/resources写项目配置文件,src/main/java写项目的java文件,src/test/java写java测试类文件.

  2. verilog实现中值滤波

    前言 项目需要,想要实现算法中的其中一步即中值滤波,同时,因为图像处理部分中值滤波相对来说还是比较简单的,将中值滤波的硬件实现作为进入FPGA领域的第一次尝试.虽然说网上有较多关于中值滤波的文档,可是 ...

  3. SyntaxError: Non-UTF-8 code starting with '\xe5' in file ***.py on line 105, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for

    用charles抓包时, 对抓到的html,放到pycharm中解析, 结果报错: SyntaxError: Non-UTF-8 code starting with '\xe5' in file * ...

  4. flask数据库的迁移

    需要的插件:flask-migrate  在每次修改模型之后,将修改的东西映射到数据库中. 使用flask-migrate 必须借助flask_scripts,这个包的所有MigrateCommand ...

  5. Django---模版层

    ---https://www.cnblogs.com/liuqingzheng/articles/9509806.html 一.处理浏览器转义字符串的两种方式 1.{{ str|safe }} 2.在 ...

  6. 关于vs设置其他主题配色问题

    可以再网上找其他的.vssettings文件导入 导入方法如下: 一般vs会将你之前设置下的配色方案自动保存下来,你也可以直接覆盖 2019-03-21  17:31:07

  7. ajax的原生调用

    https://blog.csdn.net/jitianxia68/article/details/78393406

  8. Apache Kafka 源码剖析

    Getting Start 下载 http://kafka.apache.org/ 优点和应用场景 Kafka消息驱动,符合发布-订阅模式,优点和应用范围都共通 发布-订阅模式优点 解耦合 : 两个应 ...

  9. 《DSP using MATLAB》Problem 5.18

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% O ...

  10. 在java中(==)的用法