gifts2017

Перехватчик нажатий клавиш (ActiveX)

Опубликовал Роман Ершов (MRAK) в раздел Программирование - Внешние компоненты

Примитивная компонента ActiveX, перехватывающая нажатия клавиш и принудительно возвращающая фокус компоненте при его потере. Искал в свое время для внедрения в интерфейс кассира. Может, кому еще пригодится.

Примитивная компонента ActiveX, перехватывающая нажатия клавиш и принудительно возвращающая фокус компоненте при его потере. Сделал в свое время для внедрения в интерфейс кассира - чисто для того, чтобы нормально работать в рознице ... кто юзал типовую УТ, тот поймет... жмет пользователь на любую кнопку - срабатывает контекстный поиск - сканер в ауте... и другие мелкие косяки.... Может, кому еще пригодится.

В обработке показан пример использования компоненты. Не забудьте зарегить при помощи regsvr32. При открытии формы необходимо установить фокус на контрол.

Исправлено:

  • свойство Enabled обрабатывается.
  • свойство BackColor обрабатывается.
  • остальные свойства исключены из контрола
  • добавлено свойство "ForeverGotFocus". Если оно false, то обработка потери фокуса не производится средствами контрола - обрабатывайте сами событие "LostFocus"

Скачать файлы

Наименование Файл Версия Размер
версия 1.03 139
.1197634756 24,00Kb
25.09.09
139
.1197634756 24,00Kb Бесплатно
Демонстрационная обработка 120
.1197965168 5,47Kb
25.09.09
120
.1197965168 5,47Kb Бесплатно

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Старых (tormozit) 14.12.07 19:56
Клево, а как ее использовать то?
2. Роман Ершов (MRAK) 14.12.07 22:13
Регистрируем через regsvr32, кидаем на форму... Юзаем событие KeyUp
3. Роман Ершов (MRAK) 14.12.07 22:34
Повторюсь, что контрол сырой, написал его вместе с тестированием минут за 30... если что-то надо, то доработаю.... еЕще фокус с него можно сбить только открыв модальное окно вроде бы. вообще сделан чисто для того, чтобы нормально работать в рознице с интерфейсом кассира... кто юзал типовую УТ, тот поймет... жмет пользователь на любую кнопку - срабатывает контекстный поиск - сканер в ауте... и другие мелкие косяки...
4. Сергей Генералов (serg1c) 18.12.07 10:47
А действительно, как использовать?
Хотя бы кратенькое описание команд или уж демку какую...
5. Роман Ершов (MRAK) 18.12.07 11:02
Хорошо, щас выложу обработку с этим элементом
6. Сергей Старых (tormozit) 18.12.07 22:51
Ни один другой контрол фокус не получает. Так и задумано?
7. Роман Ершов (MRAK) 19.12.07 10:01
(6) да, так задумано, дабы всегда можно было бы программно обрабатывать фокус. закончу тестирование у заказчика - выложу рабочую обработку интерфейса кассира. Если действительно необходимо программно обрабатывать потерю фокуса, то могу добавить свойство типа включить/отключить принудительный возврат фокуса.
8. Роман Ершов (MRAK) 19.12.07 10:01
(7) + блин... программно обрабатывать не фокус, а события с клавы...
9. Дмитрий (Mitay) 16.01.08 11:14
вопрос: а можно как-то организовать обработку комбинаций клавиш? например, чтобы для "shift"+"=" выдавал "+", а не коды "шифт" и "=" по отдельности?
То есть обрабатывать ситуацию, когда у shift признак нажата (но не отпущена) и после этого нажата и отпущена "=". Кнопки взяты для примера.
Тогда обработка будет универсальной и сможет различать и знаки препинания и комбинации клавишь и строчные/заглавные буквы.
10. Дмитрий (Mitay) 16.01.08 12:25
Хотя уже сам разобрался:
параметр Shift имеет 4 значения: 0 ничего, 1 - нажат shift, 2 - нажат ctrl, 3- ???, 4 - нажат alt.
то есть комбинации обрабатывать можно.
вот только не хватает признака раскладки клавиатуры, чтобы знать какой символ соответствует нажатой кнопке.

11. Дмитрий (Mitay) 16.01.08 12:51
Еще момен: обработка прекращается, если нажат "Tab" (похоже фокус всетаки теряется). выход - перезапуск обработки, но для места кассира - это плохо, ваш заказчик может оказаться недоволен.
12. Дмитрий (Mitay) 16.01.08 13:06
Можно ли всетаки добавить определение раскладки

это поможет:
Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long

13. Роман Ершов (MRAK) 16.01.08 20:39
(11) ForeverGotFocus в TRUE должно помочь.
(12) раскладку пока не просили, посмотрю на днях. как раз только собираюсь запускать.
14. Дмитрий (Mitay) 18.01.08 12:53
Замечен еще момент:
при открытии epf перехватчик успевает обработать кнопку, нажатую до открытия.
Еще это проявляется так: если открыть два отчета, содержащие перехватчик, то если в первом нажать Esc, то он закроется, а второй скажет, что нажата кнопка 27. То есть опять же идет подхват последней кнопки нажатой в другом месте.
15. Дмитрий (Mitay) 19.01.08 17:03
аналогичная ситуация: после закрытия модального окна кнопкой Ентер, перехватчик говорит, что сработал Ентер, хотя он был нажат в другом окне. То есть перехватчик ловит кнопку, нажатую до получения фокуса самим перехватчиком.
16. Роман Ершов (MRAK) 28.01.08 10:48
(14),(15) точно, есть такой косяк... можно вруную обрабатывать событие потери фокуса (LostFocus), но не удобно... в ближайшее время внесу исправления. пока другим проектом занимался
17. Роман Ершов (MRAK) 17.11.08 17:24
доработка давно прекращения, концепция изменилась)))
юзайте
http://www.infostart.ru/projects/1737/
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа