Я реализовал решение, которое работает практически в любой версии Delphi - оно было первоначально реализовано в Delphi 7, хотя я не тестировал его в более ранних версиях (но если вы используете Delphi 7 самостоятельно, это все, что вам нужно знать, верно?). :)
iirc это было по крайней мере частично вдохновением для сообщения Аллена Бауэра. Вы можете увидеть мою реализацию, продемонстрированную в некоторых видеороликах, и загрузить код from my blog:
Сообщения, которые вас интересуют, отмечены как «multicast». Ссылка для загрузки для окончательного кода: available in this post.
В моем подходе вы получаете класс из TMultiCastEvent. Весь ваш производный класс должен сделать, это реализовать простую защиту безопасности типа для добавления, удаления и вызова события с определенной подписью.
Реализация для TNotifyEvent - процедура (отправитель: TObject) - обеспечивается реализацией как «для вас» (наиболее часто используемые «многоадресные события» - это простые уведомления), а также как пример получения многоадресной рассылки классы событий для специальных сигнатур событий.
Как только у вас есть класс событий многоадресной рассылки, вы можете использовать обычные «обработчики событий» взаимозаменяемо с версией с несколькими листами, например. учитывая некоторый воображаемый кнопочный класс с многоликим событием On_Click (я принял соглашение о подстановке подчеркивания в имени события, чтобы идентифицировать его как многоадресную рассылку, а также регулярные события «uni-cast»):
Код, который присваивает обработчик одноадресному события щелчка:
Button.OnClick := MyClickHandler;
Можно напрямую добавить тот же обработчик для нескольких актеров Уведомлять событие:
MultiCastButton.On_Click.Add(MyClickHandler);
Моей реализация также включает в себя ряд усовершенствований, такие, как способность отключить события и автоматически обработать обработчики перемещается из обработчиков, когда объект реализации уничтожается (это связано с небольшим количеством домашнего хозяйства, которое может быть проигнорировано, если необходимо, но которое может быть полезно при определенных обстоятельствах).
Все это описано и продемонстрировано в моих сообщениях в блоге.
Наслаждайтесь. :)
+1; BTW: Это список ваших многостраничных событий: http://www.deltics.co.nz/blog/?tag=multicast-events –
спасибо за ваши усилия, но почему бы вам не опубликовать образец для показа как это использовать? – FLICKER