zoukankan      html  css  js  c++  java
  • RTTI D7

    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 := 0 to Self.ControlCount - 1 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 := 0 to Self.ControlCount - 1 do
      begin
        pInfo := GetPropInfo(Self.Controls[i],'Caption');
        if pInfo <> nil then
          SetPropValue(Self.Controls[i],'Caption','ABC');
      end;
    end;
    View Code
  • 相关阅读:
    Windows系统创建符号链接文件
    msi软件包无法安装
    删除我的电脑里面软件快捷方式
    本地连接速度100.0mbps变10.0mbps如何恢复
    如何清理多余的Windows桌面右键菜单
    Windows免密码远程桌面
    Win8节省C盘空间攻略
    利用FTP将Linux文件备份到Windows
    Windows服务器之间rsync同步文件
    解决“Word无法访问您试图使用的功能所在的网络位置”问题
  • 原文地址:https://www.cnblogs.com/key-ok/p/3429856.html
Copyright © 2011-2022 走看看