Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) МенеджерСобытий и Делегат (число прочтений - 8745 )
grayrat
Junior Member
**
Отсутствует



Сообщений: 99
Местоположение: Russia, Moscow
Зарегистрирован: 20. Мая 2006
Пол: Мужской
МенеджерСобытий и Делегат
05. Марта 2007 :: 06:46
Печать  
Создаю МенеджерСобытий, создаю Делегат, через УстановитьДелегата устанавливаю в МенеджерСобытий Делегат.
Как теперь можно получить ссылку на делегата, чтобы добавить методы?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #1 - 05. Марта 2007 :: 07:02
Печать  
Из менеджера никак Улыбка
Предварительно сам запоминай этот Делегат.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
grayrat
Junior Member
**
Отсутствует



Сообщений: 99
Местоположение: Russia, Moscow
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #2 - 05. Марта 2007 :: 07:11
Печать  
Логика нарушается работы Печаль((

Пока сделал через ж..., но хотелось бы иметь возможность нормального получения делегата.

Класс - наследник от структуры.

Код
Выбрать все
Процедура ДобавитьСобытие(пСобытие, пКоличествоПараметров=2, пВозврат=0, пФлагПрерывания=0) Экспорт
	Если _База.Свойство(пСобытие) = 0 Тогда
		МС = СоздатьОбъект("МенеджерСобытий");
		Д = СоздатьОбъект("Делегат");
		Д.ОпределитьТип(пКоличествоПараметров, пВозврат, пФлагПрерывания);
		МС.УстановитьДелегата(Д);
		_База.Вставить(пСобытие,МС);
	КонецЕсли;
КонецПроцедуры

Процедура ДобавитьОбработчик(пСобытие, пОбъект, пМетод="") Экспорт
	зМС = "";
	Если _База.Свойство(пСобытие,зМС) = 0 Тогда
		ДобавитьСобытие(пСобытие);
		_База.Свойство(пСобытие,зМС);
	КонецЕсли;
	Д = зМС.УстановитьДелегата(СоздатьОбъект("Делегат"));
	Если ПустаяСтрока(пМетод)=1 Тогда
		пМетод = пСобытие;
	ИначеЕсли пМетод = "Событие" Тогда
		пМетод = "Событие_"+пСобытие;
	КонецЕсли;
	Д.Добавить(пОбъект, пМетод);
	зМС.УстановитьДелегата(Д);
	_База.Вставить(пСобытие,зМС);
КонецПроцедуры

 

  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #3 - 06. Марта 2007 :: 08:32
Печать  
Ребята, простите убогого - а зачем это? Я применимость понять не могу. Можете разжевать, или ссылку....
  
Наверх
ICQ  
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: МенеджерСобытий и Делегат
Ответ #4 - 06. Марта 2007 :: 10:20
Печать  
Да-да, мне тоже интересно  Смех
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #5 - 06. Марта 2007 :: 13:14
Печать  
Зачем делегат и менеджер???
Палыч, ты так не шути  Ужас
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: МенеджерСобытий и Делегат
Ответ #6 - 06. Марта 2007 :: 14:55
Печать  
С делегатом все ясно. А вот МенеджерСобытий...
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #7 - 06. Марта 2007 :: 15:08
Печать  
Чтобы не объяснять на словах - проще взглянуть на http://www.1cpp.ru/forum/YaBB.pl?num=1155187084.  ADirks там хорошо это реализовал.
  
Наверх
 
IP записан
 
grayrat
Junior Member
**
Отсутствует



Сообщений: 99
Местоположение: Russia, Moscow
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #8 - 06. Марта 2007 :: 17:55
Печать  
Вообще это попытка сделать класс для управления формой Улыбка
Есть классы-контролы, порождающие какие-то события.
При инициализации они регистрируют эти события в управляющем классе.
Есть классы, которые обрабатывают эти события - при инициализации они соотвественно обработчики регистрируют.
А потом... Все работать должно Улыбка)) В теории, правда, пока. А на практике - делаю, смотрю что получится.

  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: МенеджерСобытий и Делегат
Ответ #9 - 06. Марта 2007 :: 18:04
Печать  
  
Наверх
ICQ  
IP записан
 
grayrat
Junior Member
**
Отсутствует



Сообщений: 99
Местоположение: Russia, Moscow
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #10 - 06. Марта 2007 :: 18:20
Печать  
Спасибо. Но я читал перед тем как начать делать. Было несколько неясных моментов, которые привели именно к такой схеме - Структура, в которой хранятся МенеджерыСобытий, а в них установлены делегаты.
Хотя, наверное, можно было бы обойтись без МенеджеровСобытий.
Но - хотелось разобраться с новым для меня функционалом. Теперь работает, как работает - а там - посмотрим. Может переделаю.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #11 - 06. Марта 2007 :: 19:27
Печать  
Цитата:


Ага, помню эту ветку. Воз и ныне там...

Только от этого ничего не изменится. Пользоваться удобно, пока пользуюсь Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #12 - 07. Марта 2007 :: 06:26
Печать  
Я лично пользуюсь МенеджеромСобытий как раз для реализации следующей схемы работы с формами в моих конфигурациях - есть классы Общие.Конфигурация и Общие.ФабрикаСобытий (в реальных конфах используются их потомки)
1. Класс Общие.Конфигурация отвечает за перехват событий 1С  и ФормЕкс, т.е. в глобальнике и в модулях форм прописан вызов спец.обработчиков типа глКонфигурация.ПослеОткрытия(Конт) или глКонфигурация.ПриЗаписи(Конт)
При получении события вызывается соответствующий метод класса ФабрикиСобытий.

2. Класс Общие.ФабрикаСобытий для каждого события 1С или ФормЕкс порождает свое событие, на которое могут подписаться различные подписчики.
т.е. подписчик вызывает код глКонфигурация.ПолучитьФабрикуСобытий().ДобавитьОбработчикСобытия(ИмяСобытия, ОбъектОбработчик,"ИмяМетодаОбработчикаВКлассеОбработчике")

Чем хорош в этом случае МенеджерСобытий - тем, что не нужно каждый обработчик называть одинаково, а можно задавать произвольные имена методов, а у Делегата все методы должны иметь одинаковые названия.

ЗЫ на днях эту старую схему, сделанную еще в 2003 г., переделал на работу с перехватчиком, стало намного проще и удобнее. Сейчас тестирую и на днях выложу в конфу классов 1С++.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: МенеджерСобытий и Делегат
Ответ #13 - 07. Марта 2007 :: 06:37
Печать  
artbear писал(а) 07. Марта 2007 :: 06:26:
Я лично пользуюсь МенеджеромСобытий как раз для реализации следующей схемы работы с формами в моих конфигурациях - есть классы Общие.Конфигурация и Общие.ФабрикаСобытий (в реальных конфах используются их потомки)

C помощью подобной схемы я на лету, в любой момент, не меняя код конфы, могу добавить произвольные обработчики для практически любых событий.

У меня для каждой формы реализованы свои локальные меню - с помощью ФормЕкса я меняю кнопку Закрыть на кнопку Действия и сажаю на нее формулу вызова события по созданию меню. Подписчики на это событие создаются в объекте конкретной конфигурации (потомок от Общие.Конфигурация).

В итоге для справочников, документов, журналов документов и т.д. у меня есть свои собственные меню, которые выполняют необходимые действия для пользователя.

Например, в ЗиК-е на справочнике сотрудников вместо кнопки Закрыть появляется кнопка Действия, в которой есть меню с нужными действиями для расчетчика - быстрый  расчет сотрудника и показ расчетного листка на этого сотрудника или показ расчетного листка/свода/расчетной ведоммости за любой период на этого сотрудника и т.д. и т.п.

ЗЫ почему меняю кнопку Закрыть на кнопку Действия - потому что нет возможности -пока нет? Улыбка - добавлять на лету новые кнопки, а для каждой формы рисовать новую кнопку влом, да и обновлять типовые потом сложнее Улыбка
А уж кнопка Закрыть есть практически на любой форме, т.е. для любой формы я могу сделать кнопку Действия !
  

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


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: МенеджерСобытий и Делегат
Ответ #14 - 07. Марта 2007 :: 06:46
Печать  
artbear
Цитата:
у Делегата все методы должны иметь одинаковые названия

До версии 1С++ 1.8.1.7 включительно никаких ограничений не замечал.  Улыбка
Про какие методы, вообще, речь? Про список вызова?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать