Necesito escribir un componente que se registrará en otros componentes y detectará si uno de los componentes registrados recibe el foco.Método flexible de detección de cambio de control enfocado
Por ejemplo para mi componente TFocusObserver
Estoy registrando tres objetos.
FocusObserver.Register(MyMemo);
FocusObserver.Register(MyButton);
FocusObserver.Register(MyEdit);
Y ahora, si uno de estos componentes recibe el foco entonces FocusObserver
está disparando un poco de evento de notificación.
Estaba buscando cómo detectar un cambio de foco y he descubierto que TScreen.OnActiveControlChange
es exactamente lo que necesito. Entonces mi componente podría conectarse a este evento. El problema es que puede existir más de un TFocusObserver
o más adelante en un futuro, de lo contrario, es posible que desee utilizar OnActiveControlChange
.
Este es el momento en el que me beneficiaría del evento de multidifusión; esto resolvería mi problema de inmediato.
Estaba pensando cómo solucionar esto y tengo actualmente dos ideas:
- Ampliación de alguna manera
TScreen
por lo que proporcionaría un evento más para mí. - Introduzca un objeto intermedio que se conectará a
OnActiveControlChange
y expondrá un evento de multidifusión para otros objetos.
Después de un breve vistazo a las fuentes que no tienen una idea clara de cómo resolver mediante el uso de la primera idea y la segunda idea tiene el inconveniente de que alguien simplemente puede asignar otro método para OnActiveControlChange
y todo terraplén desmoronarse.
Estaremos agradecidos por algunas sugerencias.
Si dijiste que * podría existir más de un TFocusObserver * al mismo tiempo, ¿quisiste decir que todos deberían haber sido notificados acerca de esos cambios de foco o solo uno de ellos? – TLama
@TLama todos ellos. – Wodzu
¿Cuál es la clase base de TFocusObserver? – balazs