Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) При нажатии\отжатии правой кнопки мыши (число прочтений - 12485 )
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
При нажатии\отжатии правой кнопки мыши
22. Сентября 2006 :: 08:45
Печать  
Пытаюсь заменить стандартное конт.меню на многострочной части. Пишу:
Код
Выбрать все
//_____________________________________________________________________________
Процедура ПриНажатииПравойКнопки(Сост,Х,У,ФСО)
	Атр = РасшФормы.ПолучитьАтрибутПоКоординатам(Х,У);
	Если Атр = 0
	Тогда
	    ФСО = 0;
	КонецЕсли;
КонецПроцедуры
 

Не срабатывает. Пишу то-же самое в ПриОтжатииПравойКнопки(). Срабатывает, но происходит нечто: выделение на ячейке многострочной части наглухо "прилипает" к курсору мыши и "отлипает" только при нажатии левой кнопки. При попытке игнорировать это явление, после выполнения метода Сервис.ВыбратьЗначение() вроде все работает, но при выполнении некоторых операций (напр. эмулировать клавиатуру) 1С-ка падает. Что делать?
P.S.FormEx не только последняя тестовая сборка.
  

Константин
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #1 - 22. Сентября 2006 :: 09:01
Печать  
При перехвате нажатия/отжатия кнопки мыши необходимо отрабатывать оба этих события. Если "при отжатии" отменяешь, то и "при нажатии" должно быть отменено.
У меня лично такой вот примерно код используется (автор не я).
Код
Выбрать все
Перем РасшФорм;
Перем НажатаПКМ;

Процедура ПриНажатииПравойКнопки(Сост,_X,_Y, ФСО)
	Если ДляВыбора = 1 Тогда
		Атр = РасшФорм.ПолучитьАтрибутПоКоординатам(_X,_Y);
		Если ПустоеЗначение(Атр) = 0 Тогда
			Если Атр.Идентификатор = "МногострочнаяЧасть" Тогда
			    РасшФорм.УстановитьТекущуюЯчейку("МногострочнаяЧасть",_X,_Y);
				Если НомерСтроки > 0 Тогда
					ФСО = 0;
	     		КонецЕсли;
				НажатаПКМ = 1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Процедура ПриДвиженииМыши(Сост,_X,_Y, ФСО)
	Если НажатаПКМ = 1 Тогда
	    РасшФорм.УстановитьТекущуюЯчейку("МногострочнаяЧасть",_X,_Y);
	КонецЕсли;
КонецПроцедуры

Процедура ПриОтжатииПравойКнопки(Сост,_X,_Y, ФСО)
	Если НажатаПКМ = 1 Тогда
		НажатаПКМ = 0;
		ФСО = 0;
	КонецЕсли;
КонецПроцедуры

РасшФорм = СоздатьОбъект("РасширениеФормы"); 

  

FormEx developer
Наверх
www  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #2 - 22. Сентября 2006 :: 09:20
Печать  
Спасибо АльФ. Я сейчас посмотрел, так управление флаго ст.обработки должно идти одн-в-один при нажатии и отжатии.
  

Константин
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #3 - 22. Сентября 2006 :: 09:25
Печать  
Цитата:
Спасибо АльФ. Я сейчас посмотрел, так управление флаго ст.обработки должно идти одн-в-один при нажатии и отжатии. Иначе 1С падает.
Короче при нажатии и отжатии - "Мы с Тамарой ходим парой"

Да. Но такие сложности только с таблицей. Т.к. она при нажатии захватывает курсор, а в при отжатии отпускает его.
Кстати, наглядный пример того, как ведет себя таблица, если отменить только "при отжатии": нажми кнопку мыши и не отпуская двигай мышь.
  

FormEx developer
Наверх
www  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #4 - 22. Сентября 2006 :: 09:31
Печать  
Но что делать с эмуляцией клавиатуры? после замены стандартного меню на Сервис.ВыбратьЗначение() и выполнении метода ЭмулироватьКлавиатуру() при повторении всего с начала 1С падает. Наверное как-то надо отключать все внешние события, которых при подобных экзекуциях возникает целый вагон?
  

Константин
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #5 - 22. Сентября 2006 :: 09:33
Печать  
Код давай.
  

FormEx developer
Наверх
www  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #6 - 22. Сентября 2006 :: 09:52
Печать  
Код
Выбрать все
//_____________________________________________________________________________
Процедура ПриНажатииПравойКнопки(Сост,Х,У,ФСО)
	ФСО = 0;
КонецПроцедуры //ПриНажатии
//_____________________________________________________________________________
Процедура ПриОтжатииПравойКнопки(Сост,Х,У,ФСО)
    ФСО = 0;
	Атр = РасшФормы.ПолучитьАтрибутПоКоординатам(Х,У);
	Если Атр = 0
	Тогда
		Меню = СоздатьОбъект("СписокЗначений");
		Меню.ДобавитьЗначение("{INS}","Добавить");
		Меню.ДобавитьЗначение("+{ENTER}","Изменить");
		Меню.ДобавитьЗначение("{F9}","Копировать");
		Меню.ДобавитьЗначение("{DELETE}","Удалить");
		Команда = "";
		Если Сервис.ВыбратьЗначение(Меню,Команда,,0,0) = 1
		Тогда
			Сервис.ЭмулироватьКлавиатуру(Команда);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры //ПриНажатии
 

Все это лежит в форме списка справочника. После выбора значения сначала все нормально - открывает форму (справочник редактируется в диалоге), помечает и т.д. Но при повторном нажатии на правую кнопку - 1С падает.
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #7 - 22. Сентября 2006 :: 10:01
Печать  
Кстати через WshShell.SendKey() то-же 1С падает.
  

Константин
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #8 - 22. Сентября 2006 :: 10:06
Печать  
У нас работает практически такой же код, но для ТЧ документа. И все замечательно работает.
  

FormEx developer
Наверх
www  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #9 - 22. Сентября 2006 :: 10:49
Печать  
Цитата:
У нас работает практически такой же код, но для ТЧ документа. И все замечательно работает.
Интересно получается. После выполнения метода ВыбратьЗначение() у меня открывается форма элемента, в модуле которого устанавливается расш.форме, равно как и в форме спика. Так вот если РасшФормы - локальная переменная - то все "ОК", а если глобальная - 1С вылетает. Сейчас сижу и переписываю все свои глРасшФормы на просто РасшФормы=СоздатьОбъект и т.д.
  

Константин
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #10 - 22. Сентября 2006 :: 11:17
Печать  
Цитата:
Цитата:
У нас работает практически такой же код, но для ТЧ документа. И все замечательно работает.
Интересно получается. После выполнения метода ВыбратьЗначение() у меня открывается форма элемента, в модуле которого устанавливается расш.форме, равно как и в форме спика. Так вот если РасшФормы - локальная переменная - то все "ОК", а если глобальная - 1С вылетает. Сейчас сижу и переписываю все свои глРасшФормы на просто РасшФормы=СоздатьОбъект и т.д.

Надеюсь, для глобальной не забывал делать все время УстановитьФорму перед вызовом каких-либо методов?
  

FormEx developer
Наверх
www  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #11 - 22. Сентября 2006 :: 11:23
Печать  
Цитата:
Надеюсь, для глобальной не забывал делать все время УстановитьФорму перед вызовом каких-либо методов?
Конечно нет, НО после открытия формы именно она установится расширяемой, а после ее закрытия - никто. А впроцедуре списка снова обращаюсь к расш.форме - а она-то закрыта. Вот и получил.
  

Константин
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: При нажатии\отжатии правой кнопки мыши
Ответ #12 - 22. Сентября 2006 :: 13:58
Печать  
Слушай, КилоГрамм. Можно ведь ходить там, где все люди ходят. А если ходить там, где люди не ходят, то можно и свалиться куда-нибудь. Или еще чего на свою попу найти.  Улыбка

Зачем ты всегда ходишь там, где люди не ходят?

Хотя, дело, конечно, твое. Твоя же попа.  Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #13 - 22. Сентября 2006 :: 14:38
Печать  
Мягонько так, но под@#$нул Улыбка
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: При нажатии\отжатии правой кнопки мыши
Ответ #14 - 23. Сентября 2006 :: 17:23
Печать  
Цитата:
Зачем ты всегда ходишь там, где люди не ходят?
Ноги кривые. А если посерьезней, то у меня есть привычка отрабатывать методы (пусть исхоженые) во всех самых тупых ситуяйциях. Любой знает, что 75% работы уходит на защиту от дурака, значит надо всегда иметь его под рукой, а мои юзеры - рядом, да и сам я не подарок.
А по сути вопроса я продолжу: как перехватить нажатие "F1"?
  

Константин
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать