Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Добавить свои пункты в Контекстное меню формы списка справочника? (число прочтений - 20990 )
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #15 - 13. Января 2010 :: 13:49
Печать  
vip, подскажи пожалуйста,
как поступить в такой ситуации:
Код
Выбрать все
Процедура ПриОтжатииПравойКнопки(Сост,Х,У,ФСО)
	Об=Форма.АктивныйЭлемент();
	Если (Об="Наименование") ИЛИ (Об="клВыбор") ИЛИ (Об="Штрихкод") Тогда
		сп=СоздатьОбъект("СписокЗначений");
		сп.ДобавитьЗначение("Новый");
		сп.ДобавитьЗначение("Изменить");
		сп.ДобавитьЗначение("Копировать");
		сп.ДобавитьЗначение("-");
		сп.ДобавитьЗначение("Запомнить");
		Выб="";
		Если глСервис.ВыбратьЗначение(сп,Выб,"",0,2)=1 Тогда
			ФСО=0;
			Если	  Выб="Новый" Тогда глСервис.SendKeys("{INS}");
			ИначеЕсли Выб="Изменить" Тогда Активизировать(Об,1); //глСервис.SendKeys("+{ENTER}");
			ИначеЕсли Выб="Копировать" Тогда глСервис.SendKeys("{F9}");
			ИначеЕсли Выб="Запомнить" Тогда глСервис.SendKeys("^C");
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры // ПриОтжатииПравойКнопки 


Когда выбираю "Изменить", то редактирование попадает на одну-две строки ниже, под текущий курсор мыши, а не тот, на котором нажимал правую кнопку.
Также не могу заставить работать команду "Запомнить" ...
  
Наверх
IP записан
 
novichek
Экс-Участник


Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #16 - 13. Января 2010 :: 14:28
Печать  
Да, как-то очень странно ведет себя в этом случае справочник. Дабы не зависеть от логики обработки события мыши справочником ИМХО можно перед выбором значения запоминать ТекущийЭлемент(), а после выбора уже его и использовать, причем, если хочется именно через Активизировать(), то у меня получилось только через ВнешнееСобытие, в котором сначала АктивизироватьОбъект(ЗапомненныйТекущийЭлемент), и только потом Активизировать(Об,1)
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #17 - 13. Января 2010 :: 14:30
Печать  
Цитата:
...  причем, если хочется именно через Активизировать(), то у меня получилось только через ВнешнееСобытие, в котором сначала АктивизироватьОбъект(ЗапомненныйТекущийЭлемент), и только потом Активизировать(Об,1)

Пристрастия к "Активизировать" нет - как еще один не удавшийся вариант.
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #18 - 13. Января 2010 :: 14:55
Печать  
Код
Выбрать все
Если	  Выб="Новый" Тогда глСервис.SendKeys("{INS}");
			ИначеЕсли Выб="Изменить" Тогда Активизировать(Об,1); //глСервис.SendKeys("+{ENTER}");
			ИначеЕсли Выб="Копировать" Тогда глСервис.SendKeys("{F9}");
			ИначеЕсли Выб="Запомнить" Тогда глСервис.SendKeys("^C") 



на кой использовать "SendKeys", разве трудно просто "ОткрытьФорму"?  Озадачен
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #19 - 13. Января 2010 :: 15:12
Печать  
chessman писал(а) 13. Января 2010 :: 14:55:
на кой использовать "SendKeys", разве трудно просто "ОткрытьФорму"?  Озадачен

редактирование только в строке. Все пользователи давно привыкли.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #20 - 13. Января 2010 :: 15:43
Печать  
кстати, при использовании svcsvc.dll проблем с "Изменить" нет. Но "Запомнить" все равно не работает.
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #21 - 14. Января 2010 :: 07:58
Печать  
Попробуй лекарство для "Запомнить":

Код
Выбрать все
ИначеЕсли Выб="Запомнить" Тогда Wrap.SendMessage(h1C, 273, 32788, -1); 




h1C - хендл главного окошка
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #22 - 14. Января 2010 :: 08:48
Печать  
chessman писал(а) 14. Января 2010 :: 07:58:
Попробуй лекарство для "Запомнить":

Код
Выбрать все
ИначеЕсли Выб="Запомнить" Тогда Wrap.SendMessage(h1C, 273, 32788, -1); 




h1C - хендл главного окошка

Спасибо!
Wrap - это объект "DynamicWrapper"?
Dll-ка, что выложена на http://www.script-coding.info/dynwrap.html у меня не регистрируется. И объект Wrapp не создается, соответственно.
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #23 - 14. Января 2010 :: 08:56
Печать  
simply писал(а) 14. Января 2010 :: 08:48:
Wrap - это объект "DynamicWrapper"?
Dll-ка, что выложена на http://www.script-coding.info/dynwrap.html у меня не регистрируется. И объект Wrapp не создается, соответственно.


Все правильно.
А как ты ее регистрируешь?
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #24 - 14. Января 2010 :: 09:17
Печать  
chessman писал(а) 14. Января 2010 :: 08:56:
А как ты ее регистрируешь?

Вариант 1 - Из кода 1С:
Код
Выбрать все
oShell.Run(СокрЛП("regsvr32 /s "+""""+СокрЛП(СпрВК.КаталогКомпоненты)+СокрЛП(СпрВК.Наименование)+""""),0,1); 


возвращает 4 вместо нуля.

Вариант 2 - из командной:
regsvr32 dynwrap.dll
пишет, что зарегистрирована, но не работает

Может в 1С не  правильно использую?
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #25 - 14. Января 2010 :: 09:24
Печать  
Сначала не обратил внимания - тебе нужна вот эта версия компоненты

http://www.script-coding.info/dynwrapx.html

в 1С объект "DynamicWrapperX"
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #26 - 14. Января 2010 :: 09:59
Печать  
chessman писал(а) 14. Января 2010 :: 09:24:
Сначала не обратил внимания - тебе нужна вот эта версия компоненты

http://www.script-coding.info/dynwrapx.html

в 1С объект "DynamicWrapperX"

Спасибо!
Здесь и материала по больше!
Пойду изучать.
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #27 - 14. Января 2010 :: 13:08
Печать  
Не знаю из-за чего, но через svcsvc.dll "Запомнить" заработал.
Вот как теперь выглядит вся процедура:
Код
Выбрать все
Перем Свс;	// : Svcsvc.Service
Перем ФормРасш;	// : РасширениеФормы
Перем РС;	// РазделительСтрок

Процедура ПриОткрытии()
	...
	Свс=СоздатьОбъект("Svcsvc.Service");
	ФормРасш=СоздатьОбъект("РасширениеФормы");
	РС=РазделительСтрок;
КонецПроцедуры // ПриОткрытии

Процедура ПриОтжатииПравойКнопки(Сост,Х,У,ФСО)
	Атр=ФормРасш.ПолучитьАтрибутПоКоординатам(Х,У);
	Если ТипЗначенияСтр(Атр)="АтрибутФормы" Тогда
		Если Атр.Заголовок="МногострочнаяЧасть" Тогда
			ФСО=0;
			Меню="Новый"+РС+"Изменить"+РС+"Копировать"+РС+"-"
			+РС+"Печатать текущую этикетку | |ПечТекЭтикетка"+РС+"-"
			+РС+"Добавить в начало диапазона | |ДобавитьНачДиапазон"
			+РС+"Добавить в конец диапазона |"+?(ВыбПолкаС.ТекущаяСтрока()=1,"D"," ")+"|ДобавитьКонДиапазон"
			+РС+"Очистить диапазон |"+?(Форма.кнПечВыб.Доступность()=0,"D"," ")+"|ОчиститьДиапазон"
			+РС+"-"+РС+"Запомнить";
			Выб=Свс.PopupMenu(Меню,0);
			Если ПустаяСтрока(Выб)=1		Тогда // ничего не делаем
			ИначеЕсли Выб="Новый"			Тогда глСервис.ЭмулироватьКлавиатуру("{INS}");
			ИначеЕсли Выб="Изменить"		Тогда глСервис.ЭмулироватьКлавиатуру("+{ENTER}");
			ИначеЕсли Выб="Копировать"		Тогда глСервис.ЭмулироватьКлавиатуру("{F9}");
			ИначеЕсли Выб="ПечТекЭтикетка"		Тогда Печать("ТекущийЭлемент");
			ИначеЕсли Выб="ДобавитьНачДиапазон"	Тогда ПриВыбореЗначения("УстановитьДиапазонС", ТекущийЭлемент());
			ИначеЕсли Выб="ДобавитьКонДиапазон"	Тогда ПриВыбореЗначения("УстановитьДиапазонПо",ТекущийЭлемент());
			ИначеЕсли Выб="ОчиститьДиапазон"	Тогда ПриВыбореЗначения("ОчиститьДиапазон");
			ИначеЕсли Выб="Запомнить"		Тогда глСервис.ЭмулироватьКлавиатуру("^c");
			КонецЕсли;
		КонецЕсли;
		Атр=Пусто;
	КонецЕсли;

КонецПроцедуры // ПриОтжатииПравойКнопки 


Жаль картинки нельзя приделать ...

Всем большое спасибо за помощь!
« Последняя редакция: 15. Января 2010 :: 12:52 - simply »  
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #28 - 14. Января 2010 :: 14:28
Печать  
Так я и не понял, чем ВыбратьЗначение от Сервиса не подошло.. там и картинки есть и вложенное меню..
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Добавить свои пункты в Контекстное меню формы списка справочника?
Ответ #29 - 14. Января 2010 :: 14:41
Печать  
Eprst писал(а) 14. Января 2010 :: 14:28:
Так я и не понял, чем ВыбратьЗначение от Сервиса не подошло.. там и картинки есть и вложенное меню..

Смотри Ответ # 15 (http://www.1cpp.ru/forum/YaBB.pl?num=1251966305/15#15)

Скриншот для наглядности.
Если нажимаю правой мышкой на А12, то редактирование начинается у А13 (под курсором).

Команда "Запомнить" заработала. Возможно пробелема была в регистре буквы "с".
« Последняя редакция: 14. Января 2010 :: 15:54 - simply »  

VybZnach.JPG ( 18 KB | Загрузки )
VybZnach.JPG
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать