3

我的表单上有一个 ADOStoredProc。它不是可视的,而是在代码中。通常,如果组件是可视的,则处理事件非常容易。只需双击所需的事件。但是我如何使用代码来做到这一点。我已经声明了一个过程:

 procedure SP_SearchAfterScroll(DataSet:TDataSet)

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

4

2 回答 2

11

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

SP_Search.OnAfterScroll := SP_SearchAfterScroll;

我假设您为 SP_SearchAfterScroll 使用了正确的签名。也就是说 OnAfterScroll 属性有一个类似的类型:

TScrollEvent = procedure(DataSet: TDataSet) of object;

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

编辑

在评论中米卡伊尔问

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

我还没来得及回答这个问题,同时米奇解释得很好,所以为了(更容易)将来参考,我在这里包括他的解释:

SP_Search.AfterScroll :=该代码分配了一个函数来在事件触发时处理事件-您不会在“分配时间”调用 SP_SearchAfterScroll ,只是将值分配给变量,因此您不传递参数。调用时需要参数 - 当事件触发时,调用者将为参数分配正确的值。当您传递参数时,编译器假定您正在调用该函数,而不是分配它,因此您会收到不兼容类型错误。当您简单地分配没有参数的函数时,编译器会理解您正在分配,而不是调用该函数。

于 2011-05-21T06:27:36.127 回答
0

声明为:

TDataSetNotifyEvent

  • 然后它工作
于 2021-11-15T12:25:00.430 回答