Delphi组件动态分配事件

时间:2011-05-21 05:36:45

标签: delphi components procedure

我的表单上有一个ADOStoredProc。它不是视觉而是代码。通常,如果组件是可视的,那么处理事件非常容易。只需双击所需的事件即可。但我如何使用code.I've声明了一个过程:

 procedure SP_SearchAfterScroll(DataSet:TDataSet)

现在我如何将SP_Search(这是ADOStoredProc)AfterScroll事件处理程序属性分配给我上面写的过程。我相信你会回答的。所以提前谢谢。

1 个答案:

答案 0 :(得分:11)

当SP_Search是TAdoStoredProc且具有OnAfterScroll属性时,您需要做的就是:

SP_Search.OnAfterScroll := SP_SearchAfterScroll;

我假设您使用了SP_SearchAfterScroll的正确签名。也就是说OnAfterScroll属性的类型如下:

TScrollEvent = procedure(DataSet: TDataSet) of object;

如果OnAfterScroll属性的类型与此不同,则需要确保SP_SearchAfterScroll过程与该类型的参数匹配。

修改

Mikayil在评论中提到

  

SP_Search.AfterScroll := SP_SearchAfterScroll(SPSearch)'   编译器抱怨说不兼容   类型TNotifyEvent和过程。但   当我写SP_Search.AfterScroll := SP_SearchAfterScroll时,它有效。什么是   区别?

我没有回答这个问题,同时 Mikey 解释得非常好,所以为了(更容易)将来的参考,我在这里包括他的解释:

  

SP_Search.AfterScroll :=该代码   指定一个处理事件的函数   什么时候开火 - 你不是在做   调用SP_SearchAfterScroll   '分配时间'只是分配一个值   变量,所以你不通过   参数。当需要参数时   打电话 - 当事件发生时   调用者将分配参数   正确的价值。当你通过   参数,编译器假定你是   调用该函数,而不是分配   它,所以你得到不兼容的类型   错误。当你只是分配   没有参数的函数,   编译器理解你正在分配,   没有调用函数。