Devo scrivere un componente che si registrerà in altri componenti e rileverà se uno dei componenti registrati riceve attenzione.Metodo flessibile per rilevare il cambio di controllo focalizzato
Ad esempio per il mio componente TFocusObserver
Sto registrando tre oggetti.
FocusObserver.Register(MyMemo);
FocusObserver.Register(MyButton);
FocusObserver.Register(MyEdit);
E ora, se uno di questi componenti viene attivato quindi FocusObserver
sta sparando un po 'evento di notifica.
Stavo cercando come rilevare un cambiamento di messa a fuoco e ho trovato che TScreen.OnActiveControlChange
è esattamente quello che mi serve. Quindi il mio componente potrebbe collegarsi a questo evento. Il problema è che più di uno TFocusObserver
potrebbe esistere o più tardi in un futuro somoene altrimenti potrebbe voler usare OnActiveControlChange
.
Questo è il momento in cui vorrei trarre vantaggio dall'evento multicast: risolverebbe il mio problema immediatamente.
Stavo pensando come risolvere questo e ho attualmente due idee:
- Estensione in qualche modo
TScreen
avrebbe fornito un altro evento per me. - Introdurre un oggetto intermedio che si collega a
OnActiveControlChange
ed esporre un evento multicast per altri oggetti.
Dopo un breve sguardo alle fonti che non hanno un'idea chiara di come risolverlo utilizzando prima idea e la seconda idea ha lo svantaggio che qualcuno può semplicemente assegnare un altro metodo per OnActiveControlChange
e tutto fill cadere a pezzi.
Sarà grato per alcuni suggerimenti.
Se hai detto * potrebbe esistere più di un TFocusObserver * in una sola volta, suppongo, volevi dire che tutti avrebbero dovuto essere informati su quei cambiamenti di messa a fuoco o solo su uno di essi? – TLama
@TLama tutti loro. – Wodzu
Qual è la classe base di TFocusObserver? – balazs