Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Сканер штрих кода   Найти похожие ветки 

 
std   (2006-02-22 01:23) [0]

Доброго времени суток. Подскажите пожалуйста как мне считать код со сканера штрих кода с клавиатурным интерфейсом. мне как то не приходилось юзать такие девайсы и я даже без малейшего понятия где рыть


 
0bsid ©   (2006-02-22 10:44) [1]

"помогите починить машину, чето не едет!!!"


 
tesseract ©   (2006-02-22 11:23) [2]

Подключи сканер в разывр клавиатуры.
Запусти notepad
прочитай штрихкод.
если не получилось - сканер в мусор.


 
isasa ©   (2006-02-22 14:13) [3]

tesseract ©   (22.02.06 11:23) [2]
Сразу так и выбросить. :)
К сканеру должна прилагаться книжеца со штрих кодами, для его программирования(установок).
Если не получится как в [2], тогда см. эту инструкцию(со штрих кодами).
А в программе пишешь код в событии клавиатуры ...


 
Rouse_ ©   (2006-02-22 18:54) [4]

Сканер ставиться в разрез клавиатуры. Ловишь соответственно WM_CHAR. При сканировании тебе идут цифры в ASCII кодировке. #13#10 - означает что сканирование завершено и тебе передан весь цифровой диапазон.


 
tesseract ©   (2006-02-25 14:47) [5]


> Сканер ставиться в разрез клавиатуры. Ловишь соответственно
> WM_CHAR. При сканировании тебе идут цифры в ASCII кодировке.
>  #13#10 - означает что сканирование завершено и тебе передан
> весь цифровой диапазон.

Здесь главное написать алгоритм отличения ввода со сканера от ввода с клавиатуры. Гемор. С Com/Usb гораздо проще.


 
Rouse_ ©   (2006-02-25 15:25) [6]


> Здесь главное написать алгоритм отличения ввода со сканера
> от ввода с клавиатуры. Гемор.

Я обычно делаю через пимпу по нажатии которой появляется форма и ловит WM_CHAR - скромно и со вкусом :)


 
GanibalLector ©   (2006-02-25 17:44) [7]

2 tesseract
>С Com гораздо проще
Полность согласен! Только вот не уверен на счет USB... как ловишь?


 
tesseract ©   (2006-02-25 19:22) [8]


> Полность согласен! Только вот не уверен на счет USB... как
> ловишь?

Через виртуальный Com-порт :-)


 
std   (2006-02-28 23:42) [9]

прошу прощения за оффтоп, но кто подскажет возможно ли на сканер прицепить кабель длинной 15-20 метров, и будет ли он нормально работать на таком растоянии от компа?
З.Ы. где можна посмотреть инфу(примеры) по програмированию сканера с COM интерфейсом?


 
GanibalLector ©   (2006-03-01 00:21) [10]

2 std
> но кто подскажет возможно ли на сканер прицепить кабель длинной 15-20 метров
Для такой работы желательно приобретать радио-сканер или блутуз-сканер ;) Они конечно дороже, но оно того стоит.

> инфу(примеры) по програмированию сканера с COM интерфейсом?
Да что там его программировать. CreateFile,ReadFile,CloseHandle или еще проще,использовать некий компонент типа ТПорт.В общем  поиск по выше изложеным ф-циям даст нужный результат.


 
tesseract ©   (2006-03-01 10:34) [11]


> общем  поиск по выше изложеным ф-циям даст нужный результат.

Поиск по этому форума на "COM-порт" более лучший результат.


> прошу прощения за оффтоп, но кто подскажет возможно ли на
> сканер прицепить кабель длинной 15-20 метров, и будет ли
> он нормально работать на таком растоянии от компа?

15 - метров за ради бога. Это стнадарт на rs232. У меня например весы за 32 метра работали (19200+подольский экранированный многожильный кабель)


 
Layner ©   (2006-04-10 20:19) [12]

Rouse_
Вопрос возник, обязательно ли использовать WM_CHAR, у меня такой вариант, OnKeyPress, с таймером на секунду, если за секунду пришло 8-12 символов (не помню сколько сам код возвращает), то это штрих код, если менее, то таймер завершается... Может и не красиво, но больше ничего не мог придумать пока. Если не секрет, как реализовать на WM_CHAR?

procedure WMChar(var Message: TWMChar); message WM_CHAR;

procedure WMChar(var Message: TWMChar);
begin
//
end;


 
Rouse_ ©   (2006-04-10 21:15) [13]


> Layner ©   (10.04.06 20:19) [12]

так и реализуй, обработчик WM_CHAR без всяких экзерцизов в виде таймера. Не пойму, в чем проблема то встала?


 
tesseract ©   (2006-04-11 09:35) [14]


> так и реализуй, обработчик WM_CHAR без всяких экзерцизов
> в виде таймера. Не пойму, в чем проблема то встала?

отделить ввод пользователя от ввода со сканера. типа пользователь со скоростью 300 букв/мин печатать не сможет явно.


 
Leonid Troyanovsky ©   (2006-04-11 09:59) [15]


> Rouse_ ©   (10.04.06 21:15) [13]

> так и реализуй, обработчик WM_CHAR без всяких экзерцизов


А зачем WM_CHAR?
На форму - обычный TEdit & TButton (Default = True).
Если только цифры, то Change override ему.

--
Regards, LVT.


 
Rouse_ ©   (2006-04-11 10:04) [16]


> Rouse_ ©   (25.02.06 15:25) [6]
>
> > Здесь главное написать алгоритм отличения ввода со сканера
> > от ввода с клавиатуры. Гемор.
>
> Я обычно делаю через пимпу по нажатии которой появляется
> форма и ловит WM_CHAR - скромно и со вкусом :)


ИМХО и пользователю понятно что чичас от нас ждут сканирования и с обработчиком проще всего...


 
atruhin ©   (2006-04-11 13:02) [17]

Сканер не нужно садить на WM_Char в таком варианте ты теряешь возможность работать одновременно с 2 сканерами, сканер+терминал сбора данных и т.д. плюс это не очень удобно. Я писал маленькую ДЛЛ которая в потоке инициализирует порт и ждет информацию, когда считан полный пакет, передает его в программу через WM_COPYDATA.
Примерно так:
{ TDevThread  поток в Dll}

procedure TDevThread.Execute;
const
 MaxLen = 50;
var
 cd : TCopyDataStruct;
 rec : TRecToPass;
 Data : array [0..MaxLen] of byte;
 DataIdx : integer;
 CountRead : integer;
begin
 DataIdx := 0;
 repeat
   CountRead:=CPort.ReadPortTimeout(Data[DataIdx],1, 10);
   if DataIdx > 0 then
      if (Data[DataIdx-1] = 13)and(Data[DataIdx] = 10) then begin
        SetLength(rec.s, 200);
        CountRead := c2hex(@rec.s[1], @Data[0],  DataIdx-1);
        SetLength(rec.s, CountRead);
        rec.s := rec.s;
        cd.dwData := 3232;
        cd.cbData := sizeof(rec);
        cd.lpData := @rec;
        SendMessage(H, WM_COPYDATA, 1, LongInt(@cd));
        DataIdx := 0;
        CountRead := 0;
      end;
   if CountRead > 0
     then inc(DataIdx, CountRead);
   if DataIdx >= MaxLen
       then DataIdx := 0;
 until Terminated;
end;

Программа:
 private
   procedure WMCopyData(var m : TMessage); message WM_COPYDATA;
....

procedure TForm1.WMCopyData(var m: TMessage);
begin
 Memo1.Lines.Add(PRecToPass(PCopyDataStruct(m.LParam)^.lpData)^.s);
end;


 
Layner ©   (2006-04-12 11:54) [18]

А зачем WM_CHAR?
На форму - обычный TEdit & TButton (Default = True).
Если только цифры, то Change override ему.


У меня дело обстоит так, есть форма (приход/расход..), на ней куча элементов Edit, Label, Grid.., без них никак не обойтись, ну и в общем пожелание такое, что находясь только на этой форме, и любом элементе ввода я мог бы словить штрих код. На форме стоит KeyPreview = True. Проблема есть, что находясь в Edit код может пропечататься в edit... Или KeyPreview = False, и сканирование производить только если находится в фокусе элемент например Grid. В общем вопросов больше чем ответов, пока сканера нет для опыта, пока только на словах..


 
Leonid Troyanovsky ©   (2006-04-12 12:24) [19]


> Layner ©   (12.04.06 11:54) [18]

> У меня дело обстоит так, есть форма (приход/расход..), на
> ней куча элементов Edit, Label, Grid.., без них никак не
> обойтись,


Сделай маленькую диалоговую форму поверх большой и, то,
что заносится в Edit разноси в нужные места большой.
Т.к., обычно сканеры сами жмут Enter (настраивается),
то на кнопку по умолчанию вешаешь обработчик,
анализирующий код и заполняющий, скажем, grid большой формы.

Edit в любом случае нужен, бо если сканер не может считать код,
то у оператора есть возможность ввести вручную (что, в общем-то,
ему вполне привычно делать именно в Edit).

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.03 c
15-1150966997
MacroDenS
2006-06-22 13:03
2006.07.23
Апдейты для Д6...


2-1151953146
Yegorchic
2006-07-03 22:59
2006.07.23
Длина и высота TListView.Item


2-1151820608
Новинький
2006-07-02 10:10
2006.07.23
with do, try, Execute...


2-1151994656
PRT
2006-07-04 10:30
2006.07.23
разрешение экрана


2-1151256162
Юнкер
2006-06-25 21:22
2006.07.23
try except как способ выбора