artbear писал(а) 08. Ноября 2007 :: 13:11: ...
Поэтому, чтобы не менять каждый раз класс ПерехватГМ для каждой конфигурации или конфы, лучше сделать так:1) Создаем базовый фабричный класс БазоваяФабрикаСозданияПерехватчиков
2) Определяем у него открытый метод ПерехватитьКонтекст(КонтФормы) Экспорт
Метод в классе ничего не делает или выдает исключение или создает пустой перехватчик. Типа этот класс является абстрактным, только для наследования

Основное действие будет происходить в конкретных классах-наследниках

3) для каждой различной конфы пишем код в ГМ
ФабрикаСозданияПерехватчиков = СоздатьОбъект("ФабрикаСозданияПерехватчиковДляДаннойКонфы"); //твой класс перехвата всех форм
НовыйПерехватчикГМ = ФабрикаСозданияПерехватчиков.ПерехватитьГМ(Конт);
4) а в наследнике ФабрикаСозданияПерехватчиковДляДаннойКонфы в методе ПерехватитьКонтекст пишем код по созданию точных обработчиков для нужных форм в данной конфе
Т.е. ООП в действии

Этот метод хорош тем, что происходит минимальное изменение существующего клиентского кода.
То есть
ФабрикаСозданияПерехватчиковДляДаннойКонфы это получается тот самый
ПерехватГМ судя по п.3?
Тогда в каком месте возникают его наследники? Ведь в данном случае он сам, в обработке "базовых" событий, вполне не абстрактно, должен решать, как с какой формой поступить, кому какой обормотчик назначить (предварительно создав его).
Собственно, для гибкости и отвязности этого
ПерехватГМ (или "ФабрикаСозд..."), нужно придумать этот
гибкий алгоритм, либо придется по любому поводу рихтовать "Если (...) Тогда ... ИначеЕсли (...) " в обработчиках этого класса.
Я так понимаю, что имелся в виду примерно такой вариант, что выясняется ТипВид открывающейся формы, проверяется наличие класса-наследника с именем (например)
"ФабрикаСозданияПерехватчиковДляДаннойКонфы." + ТипВид
потом
"ФабрикаСозданияПерехватчиковДляДаннойКонфы." + Тип
и, при наличии первого или второго, создается ОКОП и назначается на перехват для этой новой формы. Ты просто эту подробность опустил? Или имел ввиду что-то другое?