Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Перехват нажатия кнопок на клавиатуре (число прочтений - 4444 )
ssv02
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 16. Апреля 2010
Перехват нажатия кнопок на клавиатуре
18. Октября 2011 :: 13:16
Печать  
Добрый день!

Вот пытаюсь реализовать задержку ввода данных с клавиатуры немного набросал кода, но что-то не работает:
Код
Выбрать все
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) // предопределенная FormEx
	Если (Альт=0) и (Контрол=0) Тогда
		СтрокаПоискаПоКлаве=СтрокаПоискаПоКлаве+Символ;
		СервисПоиска= СоздатьОбъект("Сервис");
		СервисПоиска.ОбработкаОжидания("ТаймерПоиска",0);
		СервисПоиска.ОбработкаОжидания("ТаймерПоиска",900);
		ФСО = 0;

	КонецЕсли;
КонецПроцедуры
Процедура ТаймерПоиска() Экспорт
	    СервисПоиска = СоздатьОбъект("Сервис");
		СервисПоиска.ОбработкаОжидания("ТаймерПоиска",0);
        СервисПоиска.ЭмулироватьКлавиатуру("%"+СтрокаПоискаПоКлаве);
		СтрокаПоискаПоКлаве="";
КонецПроцедуры 




Идея состоит в том, что при вводе данных с клавиатуры сделать задержку на определенное количество милисекунд и набирать в буфер строку, вводимую пользователем. Как только пользователь останавливается (определенное время не вводит символы) - выдать эти символы системе.

Пробывал этот код, но ничего не происходит. Стоит переключиться в другое приложение и там сразу выскикивает введенная строка.
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Перехват нажатия кнопок на клавиатуре
Ответ #1 - 18. Октября 2011 :: 13:57
Печать  
Мне кажется, нужно в оконцовке обновить форму, в которую шел ввод.

Хотя нет. Ты же сам перехватывешь ввод с клавиатуры и сам же опять оправляешь символы туда же. Тоесть они никогда не выведутся. А вдругом приложении свой перехват нажатия клавиатуры, своя оконная процедура. Поэтому они туда и попадают.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Перехват нажатия кнопок на клавиатуре
Ответ #2 - 19. Октября 2011 :: 03:58
Печать  
Есть подозрение, что
СервисПоиска.ЭмулироватьКлавиатуру("%"+СтрокаПоискаПоКлаве);
перехватывается ПриНажатииКнопкиКлавиатуры(), равно как обычные нажатия кнопок.

Добавь флаг, который будешь выставлять перед ЭмулироватьКлавиатуру, и на который будешь смотреть в ПриНажатииКнопкиКлавиатуры().
  
Наверх
 
IP записан
 
ssv02
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 16. Апреля 2010
Re: Перехват нажатия кнопок на клавиатуре
Ответ #3 - 19. Октября 2011 :: 07:37
Печать  
Satans Claws писал(а) 19. Октября 2011 :: 03:58:
Добавь флаг, который будешь выставлять перед ЭмулироватьКлавиатуру, и на который будешь смотреть в ПриНажатииКнопкиКлавиатуры().


Флаг добавил. Так конечно правильнее будет. Но все равно ничего толком не работает. Символы вообще не появляются.


Вообще как бы возникает вопрос ко всем гуру форума. Есть идея и хотелось бы попробывать ее реализовать:
Как известно списки справочников, журналы документов построены на динамических курсорах. При работе с большим справочником и при поиске, например, по наименованию, пользователь набирает символы с клавиатуры и происходит переход по справочнику по соответствию символов (короче типовой поиск по списку справочника). Так вот 1с производит поиск по каждому вновь добавленному символу. При этом возникает очень сильная нагрузка на SQL происходят cursorfetch с большим количеством чтений на каждый введенный символ. Нормальный пользователь при поиске достаточно быстро вводит набор символов с клавиатуры и нет необходимости производить поиск по каждому символу. Если к примеру поставить задержку поступления символа и собирать введенную строку в буфер, то как только пользователь остановится, т.е. набрал строку (код товара и т.п.), то передать эту строку и осуществить один поиск вместо нескольких действий по поиску для каждого вновь добавленного символа.

Сама идея описана на сайте http://www.softpoint.ru/article_id165.htm. Вот хотелось бы попробовать реализовать такого рода фукционал средствами 1С++ и FormEx
  
Наверх
 
IP записан
 
dumsik
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 28
Зарегистрирован: 27. Января 2009
Re: Перехват нажатия кнопок на клавиатуре
Ответ #4 - 13. Июня 2012 :: 12:52
Печать  
Уважаемые разработчики 1cpp и formex  есть ли возможность реализовать задержку при стандартном контекстном поиске в справочниках 1с по аналогии с компонентой от sortpoint ? Реально на больших справочниках можно получить ускорение поиска и снижение нагружзи на сервер.
Работы по дороботке готов оплатить.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать