Delphi 组件动态分配事件

发布于 2024-11-08 11:21:49 字数 269 浏览 0 评论 0原文

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

 procedure SP_SearchAfterScroll(DataSet:TDataSet)

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

I have an ADOStoredProc on my form. It's not visual but in code.Normally it's pretty easy to handle an event if a component is visual.It's just a matter of double clicking the desired event. But how do I do it with code.I've declared a procedure:

 procedure SP_SearchAfterScroll(DataSet:TDataSet)

Now how do I assign SP_Search(this is the ADOStoredProc) AfterScroll event handler property to the procedure I wrote above. I'm sure you're going to answer it. So thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鸵鸟症 2024-11-15 11:21:49

当 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
“分配时间”只是分配一个值
到一个变量,所以你不会传递
范围。需要参数的时候
进行调用 - 当事件触发时
调用者将分配参数
正确的值。当你通过
参数,编译器假设你是
调用函数,而不是赋值
它,所以你会得到不兼容的类型
错误。当您简单地分配
不带参数的函数,
编译器理解你正在分配,
不调用该函数。

When SP_Search is the TAdoStoredProc and has an OnAfterScroll property, all you need to do is:

SP_Search.OnAfterScroll := SP_SearchAfterScroll;

I am assuming that you used the correct signature for SP_SearchAfterScroll. That is to say that the OnAfterScroll property has a type looks like:

TScrollEvent = procedure(DataSet: TDataSet) of object;

If the OnAfterScroll property has a type that differs from this, you will need to make sure that your SP_SearchAfterScroll procedure matches the parameters in that type.

Edit

In the comments Mikayil asked

SP_Search.AfterScroll :=
SP_SearchAfterScroll(SPSearch)'
the
compiler complains saying incompatible
types TNotifyEvent and procedure. But
when I write SP_Search.AfterScroll :=
SP_SearchAfterScroll
it works. What's
the difference?

I hadn't gotten round to answering that and in the mean time Mikey explained it very well, so for (easier) future reference I am including his explanation up here:

SP_Search.AfterScroll := that code
assigns a function to handle the event
when it fires - you are not making a
call to SP_SearchAfterScroll at
'assign time' just assigning a value
to a variable, so you don't pass
parameter. Parameter is needed when
call is made - when event fires then
caller will assign parameter with the
right value. When you pass the
parameter,compiler assumes you are
calling the function, not assigning
it, so you get incompatible types
error. When you simply assign the
function without the parameter,
compiler understands you're assigning,
not calling the function.

她比我温柔 2024-11-15 11:21:49

声明为:

TDataSetNotifyEvent

  • 然后它就可以工作

Declare as:

TDataSetNotifyEvent

  • then it works
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文