Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1150180363
Мазут Береговой
2006-06-13 10:32
2006.07.23
Американцы не были на Луне... однозначно!


1-1149660164
Вася
2006-06-07 10:02
2006.07.23
Подключение ккм через rs232


15-1150177750
Ega23
2006-06-13 09:49
2006.07.23
С Днём рождения! 10 июня


2-1151943068
Vudu
2006-07-03 20:11
2006.07.23
Печать нескольких страниц


15-1150783833
StriderMan
2006-06-20 10:10
2006.07.23
Дальность действия WiFi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский