Rtti对于事件赋值的问题(200)

  • 主题发起人 主题发起人 fly_king
  • 开始时间 开始时间
F

fly_king

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做这样一个项目,有两个bpl,一个包含界面,另外一个是处理代码。现在我需要把处理代码的过程赋值给包含界面的form和form的各个控件。使用delphi 2010的rtti,我取得了form和form的控件的各个事件,他们是以trttiproperty存在的,而各个代码处理过程是trttimethod,如何把rttimethod赋值给property
 
最近,想使用typInfo的GetMethodProp和SetMethodProp,却发现需要功能代码部分引出的是method的property,现在开始怀疑是不是需要修改功能实现部分的包装不过那样一来,要修改接口了,修改的代码量很客观了代码民工,纠结中
 
刚才看着代码发呆 随手写了这样两行 mtd.Code := Method.CodeAddress; mtd.Data := Method.ClassInfo;貌似解决了: mtd 是tmethod method 是 trttimethod不过,这样写,心里很没有底不管怎样,等明天把儿子送到学校,自己写调用脚本吧(是xml哦)
 
给ClassInfo肯定是不准确的,你需要给的是类的实例只有类方法你才能给 classInfo,如果是普通方法,你需要把类对象传给mtd.data在实际情况中,程序中动态为事件赋值如果为form1中的某个按钮的事件动态赋值: button2.OnClick := Button1Click;其实是分了两步,第一步:把类实例(也就是form1)赋值给.data,然后把函数的实际地址赋值给.code部分。在响应事件的时候,实际上就是把.data部分作为函数的第一个隐含参数传给.code所指定的函数地址。所以,你如果不是为类方法赋值,你就需要先创建你的Method所指向的那个类的实例,然后把实例本身赋值给mtd.Data 因为我的delphi2010卸载了,没有办法实际上去给你写代码来说明,只能这么干说了,呵呵。
 
你测试没出问题,估计是你写的测试程序中,响应事件的那个方法没有用到事件实际响应类中包含的数据,这样没问题,但是,如果响应事件的方法中一旦引用类中的数据,那么就会出问题,你可以测试下,在事件响应中,showmessage 一下事件响应类中包含的数据。
 
后退
顶部