Implementé una solución para esto que funciona en casi cualquier versión de Delphi: se implementó originalmente en Delphi 7, aunque no lo he probado en versiones anteriores (pero si usa Delphi 7 usted mismo, entonces eso es todo lo que necesitas saber, ¿verdad?). :)
iirc esto fue al menos en parte la inspiración para la publicación de Allen Bauer. Puede ver mi implementación demostrada en algunos videos y descargar el código from my blog:
Las publicaciones que le interesan están etiquetadas "multicast". El enlace de descarga para el código final es available in this post.
En mi enfoque, deriva una clase de TMultiCastEvent. Toda su clase derivada tiene que hacer es implementar algún tipo de protección de seguridad simple para agregar, eliminar e invocar un evento con una firma específica.
Implementación para TNotifyEvent - procedure (Sender: TObject) - se proporciona con la implementación "para que funcione" (la mayoría de los eventos de multidifusión "útiles" son notificaciones simples) y también como un ejemplo de cómo derivar multicast clases de eventos para firmas de eventos específicos.
Una vez que tenga su clase de evento de multidifusión, puede usar "controladores de eventos" regulares de forma intercambiable con la versión de multidifusión, p. dado una clase de botón imaginario con un evento On_Click de varios lanzadores (he adoptado una convención de intercalar un guión bajo en el nombre del evento para identificarlo como multidifusión, frente a eventos "uni-cast" regulares):
Código que asigna un controlador para un evento de clic unicast:
Button.OnClick := MyClickHandler;
se puede agregar directamente ese mismo manejador a una multidifusión cuando haya eventos:
MultiCastButton.On_Click.Add(MyClickHandler);
Mi aplicación también incluye una serie de mejoras, tales como la capacidad de deshabilitar eventos y tener controladores automáticamente re movido de los controladores cuando se destruye el objeto de implementación (esto implica una pequeña cantidad de tareas domésticas que pueden ignorarse si es necesario pero que pueden ser útiles bajo ciertas circunstancias).
Todo lo cual se describe y demuestra en las publicaciones de mi blog.
Disfrútalo. :)
+1; Por cierto: esta es la lista de sus publicaciones de eventos de varios anuncios: http://www.deltics.co.nz/blog/?tag=multicast-events –
gracias por su esfuerzo, pero ¿por qué no publica una muestra para mostrar ¿cómo usarlo? – FLICKER