delphi通过变量TObject引用事件对象

时间:2012-11-28 08:36:48

标签: delphi

我有一个带有函数getsomedata的组件(key:string; listener:Tlistener)

哪个侦听器声明如下事件:

Tlistener = procedure (name,age,sex:string) of object ;

但在我的组件监听器管理器中,当我添加新的监听器时,将监听器参数作为TObject类,如。

ListenerManager.addListener(key:string;Listener:TObject);

当我编译代码时,我收到了错误消息

  

实际参数不够

因为事件对象(TListener)和ListenerManager参数(TObject)。

完整功能代码示例。

procedure getsomedata (key:string;listener:Tlistener) ; 
begin

ListenerManager.addListener(key,listener); //error Here >>> addListener input parameters (key:string;Listener:TObject);

end;

我该如何解决?

1 个答案:

答案 0 :(得分:1)

在此代码中:

procedure getsomedata (key:string;listener:Tlistener) ; 
begin
  ListenerManager.addListener(key,listener);
end;

您正在尝试将TListener类型的变量传递给addListener的第二个参数。该参数的输入为TObject

现在,TListener被输入为

procedure(name,age,sex:string) of object;

过程类型的变量不能传递给TObject类型的参数。

要确切知道正确的代码是什么样子很难,因为问题不包含足够的背景信息。也许addListener应该收到TListener而不是TObject。但这只是猜测。如果您需要更完整的建议,那么您需要在问题中添加足够的详细信息。


您在评论中说明:

  

我无法将参数类型TObject更改为TListener

在那种情况下,你被困住了。根本无法将TListener转换为TObject。现在,您可以实现一个具有TListener类型的单个字段的类,并传递它。但我非常怀疑这是非常正确的解决方案。