Zaimplementowałem rozwiązanie, które działa w niemal każdej wersji Delphi - zostało pierwotnie zaimplementowane w Delphi 7, chociaż nie testowałem go we wcześniejszych wersjach (ale jeśli używasz Delphi 7, to to wszystko, co musisz wiedzieć, prawda?). :)
Iirc była to przynajmniej część inspiracji dla postu Allena Bauera. Moją implementację pokazano na niektórych filmach i pobierz kod: from my blog:
Posty, które Cię interesują, są oznaczone jako "multicast". Link do pobrania końcowego kodu to available in this post.
W moim podejściu wywodzisz klasę z TMultiCastEvent. Cała twoja klasa pochodna musi zrobić to implementacja prostego zabezpieczenia typu dla dodawania, usuwania i wywoływania zdarzenia z określonym podpisem.
Implementacja dla TNotifyEvent - procedura (nadawca: TObject) - jest dostarczana wraz z implementacją zarówno "abyś mógł działać" (najbardziej przydatne "zdarzenia multiemisji są prostymi powiadomieniami), jak również jako przykład uzyskiwania multiemisji klasy zdarzeń dla określonych sygnatur zdarzeń.
Po utworzeniu klasy zdarzenia multiemisji można używać regularnie "procedur obsługi zdarzeń" z wersją dla wielu rzutów, np. biorąc pod uwagę jakąś wyimaginowaną klasę przycisków z zdarzeniem z wieloma kliknięciami On_Click (przyjąłem konwencję wstawiania podkreślenia w nazwie zdarzenia, aby zidentyfikować to jako multicast, w stosunku do zwykłych zdarzeń "uni-cast"):
Kod, który przypisuje handler do unicast kliknij zdarzenie:
Button.OnClick := MyClickHandler;
można bezpośrednio dodawać ten sam program obsługi do grupowej Informuj zdarzenie:
MultiCastButton.On_Click.Add(MyClickHandler);
Moja realizacja obejmuje również szereg udoskonaleń, takich jak zdolność do wyłączaj zdarzenia i automatycznie uruchamiaj procedury obsługi przeniesiony z modułów obsługi, gdy obiekt implementujący jest zniszczony (wymaga to niewielkiej ilości czynności porządkowych, które można w razie potrzeby zignorować, ale które mogą być przydatne w pewnych okolicznościach).
Wszystko to jest opisane i zademonstrowane na moich blogach.
Ciesz się. :)
+1; BTW: Oto lista twoich wiadomości z wieloma zgłoszeniami: http://www.deltics.co.nz/blog/?tag=multicast-events –
dzięki za wysiłek, ale dlaczego nie publikujesz próbki do pokazania Jak tego użyć? – FLICKER