avgreen писал(а) 01. Декабря 2010 :: 11:32:Кстати версию 1с++ приведи. А то это проблему Артур решил совсем недавно и в старых версиях действительно не работал СтатусВозврата(0)
Да я разобрался - действительно, недочитал документацию. Теперь все работает.
А версия - 3.2.2.0
Теперь другой трабл:
Есть класс - наследник от ТабличноеПоле.
Этот же класс, при инициализации, натравливается на форму, как перехватчик событий.
Само по себе - все работает Ок.
Дальше, есть второй класс - Привзяки (от dmitro), немного доработанный (опять же, на предмет того же - этот же класс натравливается на форму, как перехватчик событий).
И в том и в другом классе все выглядит примерно так:
Перем Перехватчик, ПредОбработчик, КонтекстФормы;
Процедура Инит() Экспорт
...
Перехватчик = СоздатьОбъект("Перехватчик");
ПредОбработчик = Перехватчик.ПерехватитьСобытияГК(КонтекстФормы, Сам);
КонецПроцедуры // Инит
Процедура Событие_ПриИзмененииРазмераОкна(ТипСобытия, Ширина, Высота) Экспорт
...
Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстФормы, "ПриИзмененииРазмераОкна", ПредОбработчик);
КонецПроцедуры
Причем, пробовал как
Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстФормы, "ПриИзмененииРазмераОкна", ПредОбработчик); так и
Перехватчик.ВыполнитьСобытиеГК(КонтекстФормы, "ПриИзмененииРазмераОкна", ПредОбработчик);Собственно, трабл в том, что объект, инициализированный вторым, события перехватывает, нормально знает предыдущий обработчик; но перенаправление на обработчик события первого объекта не происходит.
Поскольку документация написана несколько сумбурно - подозреваю, что я что-то делаю не так.
PS можно, конечно, ручками вызывать ПредОбработчик.Событие_...() - но это еще надо дополнительно следить, что этот метод там определен... А я, как любой программист, ленив. (А был бы не ленив - хрен бы я выносил функционал в классы. Лень - двигатель прогресса.)
Вот, из документации:
Цитата:7. При необходимости вызова обработчиков событий, которые определены в контексте или в глобальном модуле, в обработчике события внутри пользовательского класса нужно использовать код
Процедура Событие_ПриЗакрытии() Экспорт
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик. ВыполнитьОригинальноеСобытиеГК (КонтПерехваченнойФормы, "ПриЗакрытии");
или для вызова предыдущего сохраненного обработчика
Перехватчик. ВыполнитьСобытиеГК (КонтПерехваченнойФормы, "ПриЗакрытии", ПредыдущийОбработчик);
КонецПроцедуры
И там же:
Цитата:ВыполнитьСобытиеГК / RunEventOfGroupContext
Синтаксис: ВыполнитьСобытиеГК(ОбработчикСобытияИлиПустоеЗначение, ГрупповойКонтекстФормы, ИмяСобытия, ...)
Возвращает: тип: Число - статус возврата модуля указанного контекста.
Параметры:
ОбработчикСобытияИлиПустоеЗначение - тип: класс 1С++ или пустое значение.
ГрупповойКонтекстФормы - тип: ГрупповойКонтекст.
ИмяСобытия - тип: Строка.
Описание: Вызывает соответствующий обработчик события контекста формы. Если обработчик не задан, просто выполняется вызов ВыполнитьОригинальноеСобытиеГК Если обработчик задан, то выполняется вызов соответствующего метода. Если метод является функцией, возвращает результат выполнения этой функции, иначе 1 Если метод не найден, возвращается 1 и не выдается сообщений об ошибках.
Параметры пробовал передавать и в том и в другом порядке.