0

関数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;

どうすれば解決できますか?

4

1 に答える 1

1

このコードでは:

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

TListenerタイプの変数をの2番目のパラメーターに渡そうとしていますaddListener。そのパラメーターは、として入力されTObjectます。

今、TListenerあるとして入力されます

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

手続き型の変数を型のパラメーターに渡すことはできませんTObject

質問には十分な背景情報が含まれていないため、正しいコードがどのように見えるかを正確に知ることはかなり困難です。おそらく、ではなくaddListenerを受け取る必要があります。しかし、それは単なる推測です。より完全なアドバイスが必要な場合は、質問に十分な詳細を追加する必要があります。TListenerTObject


あなたはコメントで次のように述べています:

パラメータタイプTObjectをに変更できませんTListener

その場合、あなたは立ち往生しています。TListenerにをキャストすることは単純に不可能TObjectです。これで、タイプが単一のフィールドを持つクラスを実装しTListener、それを渡すことができます。しかし、それが本当に正しい解決策であるかどうかは非常に疑わしいです。

于 2012-11-28T09:14:13.357 に答える