Delphi中的事件如何运作?

时间:2010-08-02 02:05:32

标签: delphi events

我正在尝试使用此库uZpRunConsoleApp从程序中获取控制台输出。 它有很好的文档记录,但我没有长时间使用Delphi,我不明白事件是如何工作的。

据我所知,我需要用我的应用程序调用ExecuteConsoleApp,我没有输出。看起来这个方法要我指定一个事件发生时可以触发的函数,但我不明白该怎么做。

我希望有人能在这里传播一些亮点。

我没有发布任何代码,因为这不是一个特定于代码的问题,但是如果有人想要我到目前为止我会为他们编辑。

1 个答案:

答案 0 :(得分:12)

是的,事件处理程序基本上是对函数的引用。如果你曾经使用过回调,它的想法基本相同。如果没有,这里是一个快速概述:

事件类型的定义如下:

TZpOnNewTextEvent = procedure(const Sender: TObject;
  const aText: string) of object;

这意味着它是对象方法(of object)的引用,其签名看起来像这样:

type
  TMyObject = class (TMyObjectAncestor)
    //stuff here
    procedure MyEventHandler(const Sender: TObject; const aText: string);
    //more stuff here
  end;

of object位非常重要。这是一个方法参考,而不是对独立函数的引用。

事件处理程序的用途是允许您自定义ExecuteConsoleApp的工作方式。这几乎就像在表单设计器中向按钮添加代码一样。将按钮放在窗体上,然后为其OnClick事件分配一个事件处理程序,通过添加单击按钮时执行的代码来自定义按钮。不同之处在于,您没有表单设计器可以为您连接它们。

幸运的是,语法非常简单。对于procedure (whatever) of object,只需提供名称即可传递事件处理程序。将Self.MyEventHandler扔到参数列表中的适当位置,它将起作用。