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

Delphi2010RTTI的增强

Delphi的Anymouse方法探秘

万一的Rtti系列

我这里的主要目的是挂钩某些内部私有事件,然后增加上一些自己的处理过程,这里我以TMenuItem的私有内部事件FOnChange作为例程。这个私有事件在菜单内部绑定,我们平常状态下,在外部无法更改!但是XE之后这个问题不在存在,使用它的全新RTTI,可以很容易的获得一个类对象的基本上所有的类的字段以及方法和属性等。

代码

上面的代码就设置了MainMenu的items的私有事件变量FOnChange的新指向地址为本窗体的实现代码了,OldMenuItemChangeCode,OldSelfData是保存私有事件的原有方法指针和传递的Self指针对象。用来在我们替换后的对象中进行调用,不然原过程就不会被调用了。然后我们再来看看,新的FonChange的实现过程

代码

这个代码中最主要的就是如何来调用原来的FOnChange的执行过程了,熟悉Delphi的人应该都知道了Delphi的对象过程中可以使用Self表示当前对象,而这个对象在对象过程中的传递是通过EAX传递的,而此时我们的新过程不是在MainMenu.Items的对象内部调用执行的,所以,我们需要显示的传递SelfData作为源对象中的Self对象指针,所以我申明了一个指针过程如下:

m: procedure(selfData: TObject;Sender: TObject; Source: TMenuItem;
  Rebuild: Boolean);

对于本申明过程,如果不是很明白的,请到CnPack的论坛上找本人对该类信息的详细分析过程。

至此这个,挂钩内部的FonChange过程,就完成了,完整代码

本文转自 不得闲 博客园博客,原文链接:   vhttp://www.cnblogs.com/DxSoft/archive/2011/01/04/1925907.html,如需转载请自行联系原作者

Delphi XE的RTTI增强,动态Hook某些内部事件相关推荐

  1. delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据

    delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据 一.工程 program TreeView; usesSystem.StartUpCopy,FMX. ...

  2. delphi xe 10.3 firemonkey stringdrig 插入,删除,添加

    以下是在WIN7 64 ,delphi xe 10.3 以下成功运行: 运行界面: 代码 unit Unit1; interface uses   System.SysUtils, System.Ty ...

  3. delphi XE关于微信公众号支付及微信零钱支付的便捷解决方案

    delphi XE关于微信公众号支付及微信零钱支付的便捷解决方案 https://download.csdn.net/download/pulledup/12683611 一.需求 因为微信公众号支付 ...

  4. Delphi XE调用百度地图

    百度地图在很多应用中会起到画龙点睛的作用,可以非常好的改变人机交互的模式,这里列出delphi xe调用百度地图的方法,通过嵌入HTML语言进行操作,主要操作点如下: 1.定义自己使用的HTML语言, ...

  5. delphi XE同步对话框、异步对话框、平台特性对话框单元FMX.DialogService.pas

    delphi XE同步对话框.异步对话框.平台特性对话框单元FMX.DialogService.pas 一.原理 1.FMX.DialogService.pas   /// <summary&g ...

  6. Delphi XE 使用 MySQL 数据库一个奇怪的问题

    Delphi XE 使用 MySQL 数据库一个奇怪的问题 我用的是自带的 ADO 组件连接 MYSQL ,连接很简单,如下: 1.下载一个 MYSQL 驱动安装上 下载地址 2.连接串 Adoc.C ...

  7. Delphi XE 10.4 FMX ListView 一个不易察觉的 BUG

    Delphi XE 10.4 FMX ListView 一个不易察觉的 BUG 在使用 ListView DynamicAppearance 时发现非常强大,可以加很多东西,但没有发现复选框(哪位大佬 ...

  8. 攻防:如何防止动态hook绕过jni签名校验

    攻 我们知道jni校验签名也不可靠,可以被动态hook绕过.代码如下: class HookSignHandler(var base : Any) : InvocationHandler {compa ...

  9. 封装的ini文件类。保存为unicode的。解决delphi xe的TiniFile保存后不为unicode的问题...

    网络摘抄 //刚封装的ini文件类.保存为unicode的.解决delphi xe的TiniFile保存后不为unicode的问题 //今天发现delphi xe的TiniFile类保存后的文件不是以 ...

最新文章

  1. ACR2010_MRI骶髂关节炎症与CTX-II变化以及TNF拮抗剂治疗过程中全身炎症改变相关...
  2. 马斯克成功把人从太空送回地球!历时64天,SpaceX首次载人任务圆满收工
  3. linux下使用syslog日志调试程序快速的调试代码信息的过程
  4. CentOS上 Mono 3.2.8运行ASP.NET MVC4经验
  5. Fabric架构演变之路 1
  6. C语言的atoi和C++的to_string
  7. 谁说 C++ 的强制类型转换很难懂?
  8. 新华三模拟器IRF配置
  9. escapexml java_fn:escapeXml()函数
  10. 全栈开发工程师微信小程序-中
  11. 淘宝直通车什么情况能退款?怎么退?
  12. [Python] RSS 文字转图片并单独抓取url以文字输出
  13. 高薪程序员面试题精讲系列34之List、Set、Map可不可以存空值?
  14. 【空间分析】地理探测器法原理及应用
  15. 显控触摸屏android,关于显控触摸屏的应用
  16. 如何正确区分方差分析、T检验、卡方检验的使用?
  17. 易语言下载别人的源码编译出来用不了_如何编译下载的易语言源码
  18. 《MATLAB SYNTAX》第9章 三维图形可视化
  19. 华为安恒信息服务器,安恒信息成为“华为云优秀严选合作伙伴” 携手保障“云上”资产安全访问...
  20. 中国四大银行正在大规模内测数字货币APP|可凭手机号完成转账

热门文章

  1. switch分解试验部分-LAB4:VLAN VTP设置
  2. 如何能include外键对应的表?向博客园的兄弟请教!
  3. 【译】Redis喜提新数据结构:Redis Streams
  4. MapReduce编程(四) 求均值
  5. ionic cordova 引用百度地图以及利用手机GPS定位
  6. 深入分析Java ClassLoader原理
  7. iOS 缓存的获取计算与清除归零
  8. 使用.NET Framework的配置文件app.config
  9. 【扇贝批量添加单词到词库】利用python调用扇贝API (oauth2)
  10. 一个有限状态机的C++实现