【发布时间】:2010-01-22 08:45:29
【问题描述】:
看了How to set event handlers via new RTTI?的帖子后,我想知道是否可以更动态地解决这个问题。例如,我想将任何组件的所有事件处理程序设置为零。
使用TValue.From <TNotifyEvent> (SomeMethod) 不起作用有两个原因:
1.类型未知(可能是TNotifyEvent、TMouseEvent等)
2. 我无法将 'SomeMethod' 设置为 nil(无效转换)
在旧的 RTTI 风格中,我会这样做:
var
NilMethod: TMethod;
begin
[...]
NilMethod.Data := nil;
NilMethod.Code := nil;
SetMethodProp (AComponent,PropertyName,NilMethod);
【问题讨论】:
-
那么旧样式有什么问题?还是不行吗?
-
旧样式没有任何问题。我只是想使用相同的样式将处理程序设置为 nil 以及更改它。如果我想更改旧样式,则需要发布方法代码。使用新样式它也可以是公共的或私有的,在这种情况下我更喜欢它。那么我真的必须混合两种解决方案吗?
标签: delphi delphi-2010 rtti