Краткое описание схемы
Схему работы с перехватом для разных классов лично я вижу именно через подписку - это наиболее универсально ! Именно этот путь я планировал для использования клиентами Перехватчика при проектировании Перехватчика.
Пример только для событий формы1. Есть базовый диспетчер, класс-обработчик перехвата, в нем или его предках описываются абсолютные все события, которые может получить форма, т.е. именно этот диспетчер подключается как перехватчик формы, один единственный перехватчик.
На каждое событие формы описывается, как правило, два события диспетчера.Первое - это быстрая проверка передачи события формы в саму форму - с возможностью прерывания цепочки.
Второе событие - это основная обработка события с доп.параметром "вызывать ли событие формы".
Но, если обработчик первого события в классе-обработчике отсутствует, ничего страшного, значит, первое событие этому обработчику не будет послано. Т.е. ускорение и упрощение.
2. Т.е. при добавлении нового события придется менять либо сам класс диспетчера, либо наследоваться от него и менять код создания этого диспетчера. Это не проблема
3. Классы, который хочет подписаться, знает о наличии этого диспетчера
4. Класс, который хочет подписаться на любые события формы, при своем создании подписывается на событие Диспетчера "Событие_ПерехватФормы". Это событие всегда вызывается при получении диспетчером первого события формы.
Это возможно в глобальнике или еще как-то.
Т.е. объекты классов-подписчиков могут храниться до открытия формы.
5. Класс-подписчик в обработчике "Событие_ПерехватФормы" может/должен подписаться на нужные события формы.
6. Также класс-подписчик может подписаться на событие формы в любой момент, например, на событие ПриЗаписи уже после открытия формы.
7. При получении диспетчером от 1С++ события формы он вызывает всех своих подписчиков по цепочке.
Сначала вызывается событие диспетчера по проверке - первое событие из п.2
Далее вызывается основное/второе событие диспетчера с передачей доп.параметра спец. флаг/состояние "вызывать ли событие формы".
8. Диспетчер после обработки всеми подписчиками события №2 проверяет флаг/состояние "вызывать ли событие формы". Если он включен, то вызывается обработчик события в локальном модуле формы перехваченного контекста.
Если выключен, то не вызывается.
ЗЫ исходная версия
http://www.1cpp.ru/forum/YaBB.pl?num=1218627334/36#36