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


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

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
ПриОтжатииКнопкиКлавиатуры проблему не решила
06. Июля 2006 :: 03:44
Печать  
Проблема заключается в том, чтобы получить значение поля ввода типа "строка" при наборе текста. При попытке получить значение в процедуре "ПриОтжатииКнопки клавиатуры" (тем более ПриНажатииКнопкиКлавиатуры) получаем пустое значение. При обращении к обработке внешнего события атрибут диалога активизируется и при (после) последующем нажатии кнопки клавиатура старый текст конечно-же заменяется последним набранным символом. Заколдованный круг получается. Что бы такое придумать?
  

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



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #1 - 06. Июля 2006 :: 06:59
Печать  
Цитата:
Проблема заключается в том, чтобы получить значение поля ввода типа "строка" при наборе текста. При попытке получить значение в процедуре "ПриОтжатииКнопки клавиатуры" (тем более ПриНажатииКнопкиКлавиатуры) получаем пустое значение. При обращении к обработке внешнего события атрибут диалога активизируется и при (после) последующем нажатии кнопки клавиатура старый текст конечно-же заменяется последним набранным символом. Заколдованный круг получается. Что бы такое придумать?

Получить значение поля ввода до нажатия "ENTER" не получится.
Можно поступить так.
Заведи переменную - строка с допустимыми символами ввода.
Например.
ШаблонСтрокиВвода="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890*"+Симв(34);      
И ПриНажатииКнопкиКлавиатуры (да хоть и ПриОтжатии) анализируй введенный символ на вхождение в ШаблонСтрокиВвода и изменяй свою переменную для приема введенного текста.
Соответственно, BackSpace и пр. нужно обрабатывать особо.

  
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #2 - 06. Июля 2006 :: 07:17
Печать  
может есть какие-то активиксы, у которых есть событие нажатия кнопки и возможность получить значение поля, до непосредственного ввода в это поле
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


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

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #3 - 06. Июля 2006 :: 07:28
Печать  
"Искусственное" получение значения текста давно известно и используется во всех ВК, способных отслеживать события клавиатуры. В FormEx это проще всех остальных: не надо никаких шаблонов: в процедуру ОбработкаВнешнегоСобытия передается значение символа клавы и формируется значение переменной модуля: Текст = Текст+Символ, прекрасно работает, НО: при таком методе возможно добавить символ только в конце, т.е. как курсор стоит в конце текста. При установке курсора в середине или начале текста символ все равно прибавится к тексту В КОНЦЕ ТЕКСТА.
Разговор о том, чтобы отслеживать любые изменения текста при нажатии/отжатии кнопки клавиатуры без включения обработки внешних событий и дополнительных операций типа нажатия Enter< Esc и т.д. Такое реализовано внутри svcsvc при выполнении метода "FilterValue", но только внутри и для передачи значения в 1С необходима доп.операция, напр. нажать Ent или Esc.
  

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



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #4 - 06. Июля 2006 :: 07:33
Печать  
Цитата:
"Искусственное" получение значения текста давно известно и используется во всех ВК, способных отслеживать события клавиатуры. В FormEx это проще всех остальных: не надо никаких шаблонов: в процедуру ОбработкаВнешнегоСобытия передается значение символа клавы и формируется значение переменной модуля: Текст = Текст+Символ, прекрасно работает, НО: при таком методе возможно добавить символ только в конце, т.е. как курсор стоит в конце текста. При установке курсора в середине или начале текста символ все равно прибавится к тексту В КОНЦЕ ТЕКСТА.
Разговор о том, чтобы отслеживать любые изменения текста при нажатии/отжатии кнопки клавиатуры без включения обработки внешних событий и дополнительных операций типа нажатия Enter< Esc и т.д. Такое реализовано внутри svcsvc при выполнении метода "FilterValue", но только внутри и для передачи значения в 1С необходима доп.операция, напр. нажать Ent или Esc.

Да я согласен. Я использую такую конструкция для быстрого поиска в справочнике при ИспользоватьСписокЭлементов(). Там прокатывает.
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


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

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #5 - 06. Июля 2006 :: 07:42
Печать  
Цитата:
Я использую такую конструкция для быстрого поиска

Только ею и приходится пользоваться, если оператор аккуратно и без ошибок набирает текст - прекрасно работает, но только если без ошибок. Здесь у меня пока только одно решениеОчень довольныйelete и все заново, а юзеры почему-то недовольны
  

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


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

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #6 - 06. Июля 2006 :: 07:46
Печать  
Цитата:
может есть какие-то активиксы, у которых есть событие нажатия кнопки и возможность получить значение поля, до непосредственного ввода в это поле

Я чуть выше об отом написал. Svcsvc прекрасно работает (хорошая штукенция), но не всегда ее внешнее представление (это список) соответствует поставленной задаче.
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #7 - 06. Июля 2006 :: 08:19
Печать  
Мудрите...

При нажатии клавиатуры проверяете текущий элемент, и если строка, то
Сервис.ЭмулироватьКлавиатуру("{ENTER}", 0, );
Система = СоздатьОбъект("Система");
Система.РазрешитьАктивацию();
Система.Активизировать("Реквизит");
Сервис.ЭмулироватьКлавиатуру("{END}", 0, );

Теперь значение содержит именно тот текст что написали в этом поле...

Ну надо еще проверку сделать на TAB, ENTER, стрелки и все служебные символы чтобы можно было выйти и делать навигацию...
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #8 - 06. Июля 2006 :: 08:28
Печать  
Цитата:
Ну надо еще проверку сделать на TAB, ENTER, стрелки и все служебные символы чтобы можно было выйти и делать навигацию...

А сам пробовал?
Я с утра попробовал так сделать без проверок...
"RESET" только спас Улыбка
А сейчас хотел с проверками, но до них не доходит Улыбка ENTER посылается и посылается
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


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

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #9 - 06. Июля 2006 :: 08:30
Печать  
Кстати по поводу: Цитата:
Система = СоздатьОбъект("Система");

Натыкаюсь на нее уже не впервые, но в документации ничего нет. Только упоминание в Itland. Может просветишь?
  

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



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #10 - 06. Июля 2006 :: 08:37
Печать  
Цитата:
Кстати по поводу: Цитата:
Система = СоздатьОбъект("Система");

Натыкаюсь на нее уже не впервые, но в документации ничего нет. Только упоминание в Itland. Может просветишь?

http://www.1cpp.ru/forum/YaBB.pl?num=1148292334
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


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

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #11 - 06. Июля 2006 :: 08:47
Печать  
Цитата:
Ну надо еще проверку сделать

Попытка эмулировать нажатие клавиатуры в процедуре ПриНажатииКнопкиКлавиатуры смерти подобна, т.к. процедура воспринимает эмуляцию, как нажатие и поехало без остановки
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #12 - 06. Июля 2006 :: 08:48
Печать  
vip писал(а) 06. Июля 2006 :: 08:28:
А сам пробовал?
Я с утра попробовал так сделать без проверок...
"RESET" только спас Улыбка
А сейчас хотел с проверками, но до них не доходит Улыбка ENTER посылается и посылается


Да, только у меня гораздо в более извращенном варианте. Единственный минус - попытаешься отредактировать строку посередине и курсор опять будет в конце. Но отредактируется Улыбка
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #13 - 06. Июля 2006 :: 08:53
Печать  
Цитата:
Да, только у меня гораздо в более извращенном варианте. Единственный минус - попытаешься отредактировать строку посередине и курсор опять будет в конце. Но отредактируется

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


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

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: ПриОтжатииКнопкиКлавиатуры проблему не решила
Ответ #14 - 06. Июля 2006 :: 09:07
Печать  
Спасибо Vip за ссылку, я видел этот тест, но он не проливает свет на систему. Так что же это такое, к чему относится что может и с чем ее едят?
А по поводу извратов - у меня он один: система зацикливается на эмуляции нажатия клавиши - и "нажимет" и "нажимает", пока не нажмешь Reset, больше ничто не помогает.
  

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