Мне нужно написать компонент, который будет регистрировать в себе другие компоненты и определять, получит ли фокус один из зарегистрированных компонентов.
Например, для моего компонента TFicusObserver
я регистрирую три объекта.
FocusObserver.Register(MyMemo);
FocusObserver.Register(MyButton);
FocusObserver.Register(MyEdit);
И теперь, если один из этих компонентов получает фокус, то FocusObserver
запускает какое-то событие уведомления.
Я искал, как обнаружить изменение фокуса, и обнаружил, что TScreen.OnActiveControlChange
— это именно то, что мне нужно. Так что мой компонент может подключиться к этому событию. Проблема в том, что может существовать более одного TFocusObserver
или позже в будущем кто-то может захотеть использовать OnActiveControlChange
.
Это время, когда я бы выиграл от многоадресной рассылки — это сразу решило бы мою проблему.
Я думал, как решить эту проблему, и в настоящее время у меня есть две идеи:
TScreen
, чтобы он предоставил мне еще одно событие.OnActiveControlChange
и предоставлять одно многоадресное событие для других объектов.После краткого просмотра исходников у меня нет ясного представления, как решить эту проблему, используя первую идею, а вторая идея имеет тот недостаток, что кто-то может просто назначить другой метод для OnActiveControlChange
, и все развалится. .
Буду признателен за некоторые предложения.