我的表单上有一个ADOStoredProc。它不是视觉而是代码。通常,如果组件是可视的,那么处理事件非常容易。只需双击所需的事件即可。但我如何使用code.I've声明了一个过程:
procedure SP_SearchAfterScroll(DataSet:TDataSet)
现在我如何将SP_Search(这是ADOStoredProc)AfterScroll事件处理程序属性分配给我上面写的过程。我相信你会回答的。所以提前谢谢。
答案 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 '分配时间'只是分配一个值 变量,所以你不通过 参数。当需要参数时 打电话 - 当事件发生时 调用者将分配参数 正确的价值。当你通过 参数,编译器假定你是 调用该函数,而不是分配 它,所以你得到不兼容的类型 错误。当你只是分配 没有参数的函数, 编译器理解你正在分配, 没有调用函数。