Имя: Пароль:
1C
1C 7.7
v7: класс Перехватчик
0 Rom_Kat
 
19.10.11
11:53
Класс внутри обработкой его текст

//+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
Процедура ВключитьПерехват() Экспорт
   Настройки = СоздатьОбъект("УправлениеНастройками");
   Настройки.Включить("ПерехватитьСобытияГК");    
   Сообщить("ПерехватитьСобытияГК");
КонецПроцедуры

//+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
Процедура Событие_ПриНачалеВыбораЗначения(ВыбЭлемент, ФлСтандОбр) Экспорт
   Сообщить("Событие "+ВыбЭлемент);
КонецПроцедуры

//+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
Процедура ПриНачалеВыбораЗначения(ВыбЭлемент, ФлСтандОбр) Экспорт
   Сообщить("Без Событие "+ ВыбЭлемент);
КонецПроцедуры

текст в глобальнике ПриНачалеРаботыСистемы

ПерехватГК = СоздатьОбъект("ПерехватчикСобытийГК");
ПерехватГК.ВключитьПерехват();

Сообшение "ПерехватитьСобытияГК" отрабатывает, но при наступлении начала выбора значения работа в обработчики не передается.

подскажите где я мануал не дочитал и чего не так сделал?
1 Ёпрст
 
19.10.11
11:55
2 Rom_Kat
 
19.10.11
11:56
мне не надо ГМ. Я хочу только ГК.
3 filh
 
19.10.11
11:56
ПриНачалеВыбораЗначения это предопредеоеная процедура.
4 Rom_Kat
 
19.10.11
11:56
или ГК не включится без ГМ?
5 Rom_Kat
 
19.10.11
11:57
(3)ну конечно
6 Rom_Kat
 
19.10.11
11:57
(3)есть у меня и Событие_ПриНачалеВыбораЗначения(ВыбЭлемент, ФлСтандОбр) Экспорт
7 Rom_Kat
 
19.10.11
12:00
ПерехватГК = СоздатьОбъект("ПерехватчикСобытийГК");
   ПерехватГК.ВключитьПерехват();
   
   Если ЗагрузитьКомпоненту("formex.dll") = 0 Тогда
       СтатусВозврата(0); Возврат;
   ИначеЕсли ЗагрузитьКомпоненту("vk_Hook1C.dll") = 0 Тогда
       СтатусВозврата(0); Возврат;
   КонецЕсли;

Грузится формекс после.
8 Rom_Kat
 
19.10.11
12:01
(1)Настройки.Сбросить("Проверка типов");
   Настройки.Сбросить("Отладка");
   //Настройки.Сбросить("Оптимизация");

   Настройки.Включить("Оптимизация");
   Настройки.Включить("TurboBL");

Это тоже надо для перехватчика?
9 Ёпрст
 
19.10.11
12:05
10 Rom_Kat
 
19.10.11
12:06
(9)все это есть и онлайн у меня
11 Ёпрст
 
19.10.11
12:06
(8) это осталось от старых версий 1cpp, сейчас эти установки по-умолчанию, при загрузке ВК, нужно только перехват включить
12 Rom_Kat
 
19.10.11
12:06
ну так я и использую 3,2,3,12
13 Rom_Kat
 
19.10.11
12:07
и включаю только перехват ГК
14 Rom_Kat
 
19.10.11
12:07
в доках и не написано, что нужно что-то еще проделать
15 Rom_Kat
 
19.10.11
12:07
может глаз замылился - раз 20 уже прочитал...
16 Ёпрст
 
19.10.11
12:09
я тебе дал рабочий класс для перехвата всего - хоть событий глобального контекста, хоть локального.
17 Rom_Kat
 
19.10.11
12:11
(16)ну это не интересно
18 Ёпрст
 
19.10.11
12:11
ну, тогда (9) :)
19 Ёпрст
 
19.10.11
12:12
3. Для включения перехвата конкретного контекста формы нужно использовать код

       ОбъектПерехватчикГК = СоздатьОбъект("КлассПерехватчикГК");
       Перехватчик = СоздатьОбъект("Перехватчик");
       Перехватчик. ПерехватитьСобытияГК (КонтФормы, ОбъектПерехватчикГК);

   или

       Перехватчик. ПерехватитьСобытияГлобальногоМодуля (ОбъектПерехватчикГМ);

   или

       ПредОбработчик = Перехватчик. ПерехватитьСобытияГК (ОбъектПерехватчикГК);
       ПредОбработчик = Перехватчик. ПерехватитьСобытияГлобальногоМодуля (ОбъектПерехватчикГМ);
20 Rom_Kat
 
19.10.11
12:14
так я не хочу конкретного.

0. Для использования перехвата должна быть включена настройка 1С++ " ПерехватитьСобытияГК / EnableHookEventsGroupContext " См. SettingsManager

1. Необходимо использовать пользовательский класс 1С++, в котором должны быть определены обработчики соответствующих событий с названием события (ПриЗакрытии, ПриНачалеВыбораЗначения, ПриНажатииКнопкиКлавиатуры) или со специальным названием в виде Событие_НаименованиеСобытия (Событие_ПриЗакрытии, Событие_ПриНачалеВыбораЗначения, СобытиеГМ_ПриНажатииКнопкиКлавиатуры)
21 Rom_Kat
 
19.10.11
12:14
или конкретно надо включать?
22 Rom_Kat
 
19.10.11
12:17
ПредОбработчик = Перехватчик. ПерехватитьСобытияГК (ОбъектПерехватчикГК);
вот это вообще не работает поскольку
Синтаксис: ПерехватитьСобытияГК(ГрупповойКонтекстФормы, ОбъектПользовательскогоКлассаОбработчикаПерехвата)

Возвращает: тип: Объект или пустое значение.

Параметры:
ГрупповойКонтекстФормы - тип: ГрупповойКонтекст.


ОбъектПользовательскогоКлассаОбработчикаПерехвата - тип: Класс КОП.
Пользовательский класс, в котором определены обработчики событий контекста формы.

Описание: Перехватывает любые предопределенные события контекста формы, как 1С, так и FormEx. Снять перехват можно с использованием метода СнятьПерехватСобытийГK .

Если настройка 1С++ " ПерехватитьСобытияГК / EnableHookEventsGroupContext " не включена, будет выдано исключение. В случае, если первый параметр не является групповым контекстом, выдается исключение. В случае, если второй параметр не является пользовательским классом, выдается исключение.
23 Ёпрст
 
19.10.11
12:18
тебе перехватывать надо где ?
Это для начала.
24 Rom_Kat
 
19.10.11
12:22
не понял вопрос. В моей конфе. Обработчик перехвата вот здесь
класс ПерехватчикСобытийГК=ПерехватчикСобытийГК@MD
{
   void Конструктор();
   void Деструктор();
   void ВключитьПерехват();
   void Событие_ПриНачалеВыбораЗначения(Строка ВыбЭлемент, Число ФлСтандОбр);
   void ПриНачалеВыбораЗначения(Строка ВыбЭлемент, Число ФлСтандОбр);
   void Событие_ПриОткрытии();
};

Сообщить заменю на код нужный.
25 Ёпрст
 
19.10.11
12:24
(24) ты не понял, сам же пишешь,>>>так я не хочу конкретного.

вот я и спрашиваю, в каких формах нужен перехват ?

И чем не нравится решение в (1) ?
:)
26 Rom_Kat
 
19.10.11
12:25
(25)не понимаю чем мое отличается от этого (1)
27 Rom_Kat
 
19.10.11
12:26
перехват нужен событий всех форм.
28 Rom_Kat
 
19.10.11
12:26
в том числе и которые будут внесены после.
29 Ёпрст
 
19.10.11
12:27
по-умолчанию, реализация перехватов такая - создается класс перехватчик, в котором перехватываюся глобальные методы+спец. методы типа приСозданииКонтекста.
Далее, для перехвата локальных событий формы нужно создать еще один класс, в котором будут перехватываться локальные события.

В (1) оба этих класса объединены в 1.
Артур, не советует так делать, хотя у меня проблем пока не было.
30 Ёпрст
 
19.10.11
12:28
для перехвата локальных событий, класс перехватчик создается из глоб. событий - типа ПриОткрытии или ПриСозданияКонтекста (что правильнее).
31 Rom_Kat
 
19.10.11
12:33
(30) ну вот это уже более... Почитаю ка я еще повнимательнее ))
32 artbear
 
19.10.11
17:10
(29) У народа были какие-то глюки с перехватом некоторых событий, если перехват ГМ и ГК находится в одном классе :(
После простого разнесения на разные классы глюки пропадали.