私は以前のバージョンではテストしていませんでしたが、Delphi 7のどのバージョンでも動作していましたが、これはDelphi 7で初めて実装されました。それはあなたが知る必要があるすべてです、そうですか?)。 :)
iircこれは、少なくとも部分的にアレン・バウアーのポストのインスピレーションでした。私の実装がいくつかのビデオで実演されているのを見て、コードをダウンロードしてください。from my blog:
興味のある投稿は「マルチキャスト」とタグ付けされています。最終コードのダウンロードリンクはavailable in this postです。
私のアプローチでは、TMultiCastEventからクラスを派生させます。すべての派生クラスは、特定のシグネチャを持つイベントを追加、削除、呼び出しするための単純な型安全保護を実装するだけです。
TNotifyEvent - procedure(Sender:TObject)の実装には、 "あなたを手に入れる"(ほとんどの "便利な"マルチキャストイベントは簡単な通知である)実装と、マルチキャストを引き出す方法の例として提供されています特定のイベント・シグニチャーのイベント・クラス。
マルチキャストイベントクラスを取得したら、通常の「イベントハンドラ」をマルチキャストバージョンと同じ意味で使用できます。 (イベント名にアンダースコアを挿入してマルチキャスト、通常の「ユニキャスト」イベントを指定するという規約を採用しています)
ユニキャストクリックイベントにハンドラ:
Button.OnClick := MyClickHandler;
直接イベントを通知し、マルチキャストに同じハンドラを追加することができます。
MultiCastButton.On_Click.Add(MyClickHandler);
私の実装はまた、このような機能など、改良の数が含まれ
へイベントを無効にし、自動的にハンドラを再設定する実装オブジェクトが破棄されたときにハンドラから移動されます(これは必要に応じて無視することができる少々のハウスキーピングを含みますが、特定の状況下では有効です)。
私のブログの記事では、そのすべてが説明され、実証されています。
お楽しみください。 :)
+1;ところで、これはあなたのマルチキャストイベントの投稿の一覧です:http://www.deltics.co.nz/blog/?tag=multicast-events –
あなたの努力に感謝します。しかし、あなたはサンプルを公開してみませんか?それの使い方? – FLICKER