Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ВызыватьМетодыКакСобытия (число прочтений - 3906 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
ВызыватьМетодыКакСобытия
11. Февраля 2007 :: 23:44
Печать  
Sedmin, а на кой оно? С чем его едят?
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: ВызыватьМетодыКакСобытия
Ответ #1 - 12. Февраля 2007 :: 07:33
Печать  
Цитата:
__ВызыватьМетодыКакСобытия / __CallMethodsAsEvents

Синтаксис:
    __ВызыватьМетодыКакСобытия(<Флаг>)

Параметр:
    Флаг - необязательный параметр. Число: 0 - отключает, 1 - включает вызов методов как событий.

Возвращает:
    Предыдущее установленное значение.

Описание:
    Вызов методов как событий влияет на установку номера строки для таблиц, расположенных на форме контекста, а также на подключение таблиц-шаблонов для объектов типа "Таблица", используемых в этом контексте (метод Таблица.ИсходнаяТаблица()).

Вызов метода влияет только на тот контекст, для которого он вызван. До вызова этого метода соответствующий ему флаг установлен в <1>.


Комментарий:
    Вызов метода (процедуры или функции) контекста может иметь разный результат в зависимости от того, был ли этот метод вызван из другого метода контекста, либо этот же метод вызван извне, например, по нажатию кнопки на форме. Например, для метода СообщитьНомерСтроки():

Код
Выбрать все
Процедура СообщитьНомерСтроки()
    Сообщить(тзНаФорме.НомерСтроки());
КонецПроцедуры

Процедура СменитьИСообщить()
    тзНаФорме.ПолучитьСтрокуПоНомеру(1);
    СообщитьНомерСтроки();
КонецПроцедуры 


Вызов же того же метода контекста извне может иметь даже более непредсказуемый результат:

Код
Выбрать все
Процедура СменитьИСообщитьДляКонтекста(Конт)
    Конт.тзНаФорме.ТекущаяСтрока(2);
    Конт.тзНаФорме.ПолучитьСтрокуПоНомеру(1);
    Конт.СообщитьНомерСтроки();
КонецПроцедуры 


В результате вызова данной процедуры может вывестись как 1, так и 2. В зависимости от версии TurboBL (или 1С++), которую вы используете.

Для устранения данной неоднозначности и был добавлен метод групповых контекстов __ВызыватьМетодыКакСобытия(). Результатом вызова

Код
Выбрать все
Конт.__ВызыватьМетодыКакСобытия(0);
СменитьИСообщитьДляКонтекста(Конт);
Конт.__ВызыватьМетодыКакСобытия(1);
СменитьИСообщитьДляКонтекста(Конт); 


будет

Цитата:
1
2


Заметил, что доку не до конца залил. Каюсь. Буду исправляться.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВызыватьМетодыКакСобытия
Ответ #2 - 12. Февраля 2007 :: 08:50
Печать  
Ага понял...
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: ВызыватьМетодыКакСобытия
Ответ #3 - 12. Февраля 2007 :: 11:57
Печать  
Вот ссылка на эту тему:
http://www.1cpp.ru/forum/YaBB.pl?num=1165178233
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВызыватьМетодыКакСобытия
Ответ #4 - 16. Октября 2007 :: 22:40
Печать  
Артур, вот есть такая фича как __ВызыватьМетодыКакСобытия(1)
Предположим, я в некой процедуре для перехваченного контекста вызову "ПриВыбореЗакладки", то Перехватчик должен сработать или нет?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВызыватьМетодыКакСобытия
Ответ #5 - 17. Октября 2007 :: 11:26
Печать  
Если внутри модуля перехваченной формы вызывать вручную "ПриВыбореЗакладки", то ИМХО Перехватчик не сработает Печаль независимо от вызова указанного метода.
В модуле формы вызов методов реализован по-другому - используется компилирование.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВызыватьМетодыКакСобытия
Ответ #6 - 17. Октября 2007 :: 11:38
Печать  
Больше похоже вариантов нет иннициировать событие вызвав его как метод?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВызыватьМетодыКакСобытия
Ответ #7 - 17. Октября 2007 :: 11:44
Печать  
Почему нет?
Есть простой способ
Код
Выбрать все
ВернутьТожеСамое(КонтекстФормы).НужноеСобытие(НужныеПараметры); 


т.е. вызов события через контекст формы
В этом случае Перехватчик нормально отработает.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВызыватьМетодыКакСобытия
Ответ #8 - 17. Октября 2007 :: 11:46
Печать  
В самой форме делаю Сам().ПриВыбореЗакладки - Перехватчик не срабатывает
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВызыватьМетодыКакСобытия
Ответ #9 - 20. Октября 2007 :: 19:02
Печать  
В общем оказалось все просто...

Arta, 17.10.2007 15:42:55:
эх я и дубина...

Перехватчик = СоздатьОбъект("Перехватчик");
ПерехватчикСобытий = Перехватчик.ПолучитьПерехватчикСобытийГК(Конт);
ПерехватчикСобытий.ПриВыбореЗакладки(НомерЗакладки, ПереданныйЭлемент);

все равно в классе вызываются оригинальные события

artbear, 15:44:23:
этот код сработает только в случае, если в классе-перехватчике есть метод "ПриВыбореЗакладки".
Еще надежнее
Перехватчик.ВыполнитьСобытиеГК(ПерехватчикСобытийИлиПусто, КонтФормы, ИмяСобытия, Параметры...)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать