Использование сканера штрих-кода с Delphi

Я разрабатываю POS (собственный проект) и думаю добавить сканер штрих-кода, чтобы быстрее фиксировать продажи. В данный момент у меня нет с собой сканера, и я хотел бы задать несколько вопросов, так как немного застрял.

На экране продаж моя первоначальная идея состояла в том, чтобы иметь компонент TEdit, и когда человек сканирует продукт, он заполнит TEdit строкой. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я хочу сделать TEdit невидимым, чтобы человек его не видел. Но как только вы сделаете TEdit невидимым, вы не сможете установить на нем фокус, так что этот план не сработает.

Так может ли кто-нибудь предложить, что я могу использовать для «захвата» отсканированной строки? Как мне заставить компонент слушать и ждать сканера? Я предполагаю, что сканер будет похож на обычное событие клавиатуры, например, нажатие кнопки или нажатие.


person Japster    schedule 26.02.2013    source источник
comment
Сканеры штрих-кода обычно отправляют нажатия клавиш, поэтому вы можете обращаться с ними так же, как с клавиатурой. Если вы не хотите иметь видимое редактирование, вы можете обрабатывать нажатия клавиш на уровне формы с помощью событий OnKey Up/Down/Press.   -  person jachguate    schedule 27.02.2013
comment
Я понимаю, но что я буду использовать для захвата строки штрих-кода, как только произойдет событие OnKey. С TEdit это легко, так как я мог просто позволить строке появиться в TEdit и взять ее оттуда.   -  person Japster    schedule 27.02.2013
comment
Оказывается, вопрос имеет мало общего со сканером штрих-кода, а больше с тем, как получать текст без целенаправленного управления. Это правильно?   -  person Kromster    schedule 28.02.2013
comment
@Krom Да, это был бы гораздо лучший вопрос.   -  person Japster    schedule 28.02.2013
comment
Есть некоторые сканеры штрих-кода, которые могут обойти клавиатурный разрыв, и вы можете подключить свою программу напрямую к устройству сканера штрих-кода, которое отображается как последовательный порт для вашей программы. Я считаю, что это лучше, чем HID/клавиатура для НЕКОТОРЫХ приложений. Просто размещаю информацию там для вас.   -  person Warren P    schedule 01.03.2013


Ответы (4)


Вы можете использовать TEdit с высотой и шириной 0, чтобы он не отображался, и убедитесь, что он сфокусирован при сканировании штрих-кода.

person Epiphanyx    schedule 25.03.2013

В TForm есть свойство KeyPreview. Установите значение true, чтобы все нажатия клавиш обрабатывались формой, а не элементами управления.

Статья об обработке клавиатуры в Delphi: http://delphi.about.com/od/objectpascalide/a/keyboard_events.htm

Связанный вопрос SO: Как работает KeyPreview в Delphi?

person Harriv    schedule 27.02.2013

Что я сделал, так это использовал KeyPreview для мониторинга функциональной клавиши, такой как F9, с которой сканер штрих-кода настроен на сканирование префикса. Когда это получено, я открываю диалоговое окно с одним полем редактирования и кнопкой ОК. Затем он получает остальную информацию о штрих-коде, и сканер завершает ввод клавишей Enter. Затем я могу определить назначение отсканированных данных (в моем случае один тип начинается с префикса), а затем поместить данные в соответствующее поле моей основной формы.

Я выбрал F9, потому что в большинстве приложений она кажется инертной, поэтому вы можете использовать сканер другими способами, но я также поддерживаю другие клавиши для гибкости. В моем приложении также есть тестовый режим сканера, где он показывает отправленные ключи.

person mj2008    schedule 27.02.2013

Вы также можете разместить TEdit за пределами видимого окна, установив свойства Top и Left компонента на что-то вроде -50. Затем вы можете установить на него фокус, как на обычное видимое поле TEdit, но оно будет невидимым для пользователя.

person Rafael Schmitt    schedule 07.07.2015