Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) класс "ПанельВкладок" (разбираемся с перехватом) (число прочтений - 6054 )
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
класс "ПанельВкладок" (разбираемся с перехватом)
28. Февраля 2018 :: 10:15
Печать  
Выкладываю "скелет" класса "ПанельВкладок" по образу Firefox, на примере которого, хочу обратиться к специалистам по поводу грамотной обработки событий через класс "Перехватчик".
Заранее благодарю за помощь.

Вызов:

     ПанельВкладок=СоздатьОбъект("ПанельВкладок");
     ПанельВкладок.УстановитьАтрибут("Панель",5,"bx1");
     ПанельВкладок.ЦветПанели(14467239,15389113);
     ПанельВкладок.НоваяВкладка();

Соответственно: formex и ActiveX от vip SemenPic.ocx в архиве





https://drive.google.com/file/d/1qGJJQlEvCYpIO0d0d_2s2uQn-XefRtKy/view?usp=shari...
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #1 - 01. Марта 2018 :: 12:15
Печать  
ну дык, всё просто

1. к обработчикам событий в классе приделай префикс "Событие_"

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

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


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #2 - 01. Марта 2018 :: 13:22
Печать  
ADirks писал(а) 01. Марта 2018 :: 12:15:
ну дык, всё просто

1. к обработчикам событий в классе приделай префикс "Событие_"

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



1. к обработчикам событий в классе - Экспорт оставлять?
2. В какой форме вызывающей или в КОП

И так и не так - не работает. По-видимому не так все просто.

Если можно поподробней. Спасибо
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #3 - 01. Марта 2018 :: 14:09
Печать  
А если на форме десяток подобных объектов?

И вообще вопрос о том, чтобы в вызывающей форме никаких дополнительных классов вызовов не было.
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок"
Ответ #4 - 04. Марта 2018 :: 20:08
Печать  
Заработало!!!

В классе

procedure УстановитьАтрибут(Имя,МаксВкладок=0,Рамка="") export
     ...
     ...
     УправлениеНастройками = СоздатьОбъект("УправлениеНастройками");
     УправлениеНастройками.Включить("ПерехватитьСобытияГК");
     
     Перехватчик = СоздатьОбъект("Перехватчик"); 
     Перехватчик.ПерехватитьСобытияГК(КонтФормы, Контекст);

endprocedure // УстановитьАтрибут()

Остался вопрос, что делать с "УправлениеНастройками" и "Перехватчик"-ом после закрытия формы?
« Последняя редакция: 04. Марта 2018 :: 23:45 - recop »  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #5 - 04. Марта 2018 :: 23:49
Печать  
В шапке выложена рабочая версия класса ПанельВкладок. Предложения и пожелания пишите здесь. Проверено, используется.
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #6 - 17. Марта 2018 :: 21:56
Печать  
Обновлен
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #7 - 19. Марта 2018 :: 03:52
Печать  
Включать перехват каждый раз не надо. Т.е. код
УправлениеНастройками = СоздатьОбъект("УправлениеНастройками");
УправлениеНастройками.Включить("ПерехватитьСобытияГК");
надо выполнить один раз при старте системы.

С перехватчиком делать ничего не надо. Сам изничтожится.
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #8 - 19. Марта 2018 :: 05:52
Печать  
Спасибо, добрый человек. Перехватчик пока не подводил. А вот ActiveX (показала практика) действительно необходимо уничтожать.

А по включению настроек всё же вопрос. В описании сказано, что состояние настройки записывается в реестр:

3. При изменении настройки данные об этом сохраняются в реестре Windows. [HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\%DB%\V7\%USERNAME%\1C++ options]
При следующей загрузке 1С++ все настройки будут автоматически загружены.


Поэтому я и решил, что лишняя перезапись ничего не изменит и диск не износится, а помнить об этом уже будет не нужно. Я не прав? Хотелось бы ознакомиться с Вашим мнением. Спасибо.
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #9 - 19. Марта 2018 :: 09:09
Печать  
Обновлено.

https://drive.google.com/uc?export=download&confirm=no_antivirus&id=1_vUVc3HDjyG...

модератору просьба заменить ссылку в шапке
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #10 - 19. Марта 2018 :: 10:08
Печать  
recop писал(а) 19. Марта 2018 :: 05:52:
Поэтому я и решил, что лишняя перезапись ничего не изменит и диск не износится, а помнить об этом уже будет не нужно. Я не прав? Хотелось бы ознакомиться с Вашим мнением. Спасибо.


В общем то конечно, хуже от этого никому не станет.
  
Наверх
 
IP записан
 
vladimirmir2012
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 426
Зарегистрирован: 18. Мая 2011
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #11 - 19. Марта 2018 :: 10:44
Печать  

У меня имеется обработка, которая используется для регистрации классов - defcls.

Код (C++)
Выбрать все
//# класс КлассИнициализацияОтладки = КлассИнициализацияОтладки@MD
//# {};
//# класс КлассПерехватСобытий = КлассПерехватСобытий@MD
//# {};
//# класс ПанельВкладок =  ПанельВкладок@MD
//# {};
 



ПанельВкладок.ert добавил в Обработки.

Использовал пример для создания вкладки из документации.
При отработке теста имею:

ПанельВкладок::Деструктор() : Значение не представляет агрегатный объект
actxBasis.Уничтожить();
{ПанельВкладок@MD(194) }

ПанельВкладок::Деструктор() : Значение не представляет агрегатный объект
actxBasis.Уничтожить();
{ПанельВкладок@MD(194) }
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #12 - 19. Марта 2018 :: 10:53
Печать  
А если регистрировать класс обычным способом с помощью файла нормально?
  
Наверх
 
IP записан
 
vladimirmir2012
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 426
Зарегистрирован: 18. Мая 2011
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #13 - 19. Марта 2018 :: 11:09
Печать  
У меня на форме не было поля с именем "Текст".
Добавил, вроде ошибок не стало.
Жму на "+", появляется пустая вкладка.
  
Наверх
 
IP записан
 
vladimirmir2012
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 426
Зарегистрирован: 18. Мая 2011
Re: класс "ПанельВкладок" (разбираемся с перехватом)
Ответ #14 - 19. Марта 2018 :: 11:41
Печать  
На форме не было поля с именем "Панель" /не кнопка, а текстовое/ и рамки.
У меня все по другому реализовано /GUI. Но это совершенно иная песня/.
В целом - cпасибо.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать