Форум: "WinAPI";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
ВнизСканер штрих кода Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.012 c