Работа со сканером

арт2010
Дата: 20.09.2019 18:25:44
Может кто поделиться кодом? Надо внедрять в самописное ПО (delphi 2007) работу со сканерами в связи с маркировкой лекарственных средств. до это сканеров не было вообще. Надо разобраться как вврбще с ним работать вообще, быстрое гугление пока ничего рабочего не дало
арт2010
Дата: 20.09.2019 18:28:26
Сканер штрих кодов естественно
GrigoriyFomin
Дата: 20.09.2019 22:47:12
арт2010,

обычные штрих-код сканеры ставятся как HID-клавиатуры и при нажатии кнопки сканирования на пистолете - сканируют штрих-код, пытаются его раскодировать и при успехе пикают и эмулируют нажание клавиш на клавиатуре. То есть можно открыть блокнот и пропикать штрихкоды - должны вставиться строки с цифрами. Фишка - каждый сканер может выдавать лидирующий символ - типа начало штрихкода - это в настройках можно отключить. Мы закупали разные сканеры, они разные лидирующие символы выдавали, нередко это символ !
можно просто игнорить в окне ввода все символы, кроме цифр, #8 и #13, и тогда штрихкод можно внести как с клавиатуры обычно, так и сканером.

вот мой кусок кода работы со сканером. edBarcode - обычный TEdit
procedure TCheckForm.edBarcodeKeyPress(Sender:TObject;var Key:Char);
begin
  if Key = #13 then
  begin
    ProcessBarcode(edBarcode.Text);
    edBarcode.Text:='';
  end;
  if not charinset(Key,['0' .. '9',#8]) then Key:=#0;
  edBarcode.SetFocus;
end;
Cobalt747
Дата: 24.09.2019 09:12:53
GrigoriyFomin,

Но лучше их переводить в режим виртуального ком-порта.
Точно будешь знать, что это данные от сканера, и не будешь зависеть от раскладки клавиатуры и зажатого Shift/Caps
Softologic
Дата: 24.09.2019 10:30:03
Cobalt747
GrigoriyFomin,

Но лучше их переводить в режим виртуального ком-порта.
Точно будешь знать, что это данные от сканера, и не будешь зависеть от раскладки клавиатуры и зажатого Shift/Caps


Определенно! Давно работаю со сканерами и обработка месседжей в виде событий куда приятнее, поскольку нет нужды тыкать мышью в определенное поле ввода.
V.Borzov
Дата: 25.09.2019 03:24:41
арт2010,

Если в режиме клавиатуры, то можно привязаться к TApplicationEvents.OnMessage, вылавливать оттуда Msg.message = wm_char и обрабатывать. Надо дождаться префикса, который поступает со сканера, какой-нибудь символ, который от юзера вряд ли поступит, сожрать всё до поступления суффикса, и выдать готовый штрихкод всем заинтересованным объектам. Префиксы и суффиксы практически во всех штрихкодах легко программируются. Если нет, то можно завязаться на таймауты, но тут чуть сложнее.

Если в режиме com-порта, то программировать еще проще, не надо думать, откуда пришел этот сигнал. Как читать из COM-порта, можно погуглить. Щас набрал "delphi чтение из com-порта", и был удивлен, сколько вариантов есть. Но мы делали как-то вроде вот этого: https://toster.ru/q/127263.

Наконец, чтобы вообще не париться, можно купить драйвер АТОЛ сканеров штрихкодов. Стоит недорого, всё становится элементарно.
dartveider13
Дата: 30.09.2019 08:39:16
Я использую библиотеку TComPort. На мой взгляд элементарная штука. Сканеры у меня работают в режиме виртуального COM-порта. Для этого ставим драйвер, переводим сканер в соответствующий режим через настроечные ШК. Ну и делаем обработчик событий TComPort в Delphi.
Softologic
Дата: 30.09.2019 13:58:44
dartveider13
Я использую библиотеку TComPort. На мой взгляд элементарная штука. Сканеры у меня работают в режиме виртуального COM-порта. Для этого ставим драйвер, переводим сканер в соответствующий режим через настроечные ШК. Ну и делаем обработчик событий TComPort в Delphi.

А можете показать пример кода, например, при обработке событий?
И какой именно драйвер используете?
DmSer
Дата: 30.09.2019 15:41:01
И какой именно драйвер используете?


Для каждой модели сканеров обычно разные драйвера. В хороших драйверах СОМ-порт не исчезает при выдёргивании сканера из USB. Информация о драйвере должна идти в документации к сканеру. Также в документации указано, как перевести драйвер в режим СОМ-порта.