сканер штрих кода под linux

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

сканер штрих кода под linux

Сообщение AnacRon » 16.12.2009 11:37:25

Доброго времени суток.
У мня возникли сложности при работе с этой штукенцией...
Сканер USB Metrologik 9590 (работает как HID клавиатура). Сам сканер адекватно отрабатывает события (в gedit и notepad штрих код отображается полностью)... Проблема в следующем: сама программа имеет всего одну форму, ввод штрих кода ожидается на OnKeyUP (пробовал OnKeyPress и OnKeyDown) самой формы, при считывании часть значений просто теряется (к примеру вместо 000123456784 получается 01278 или что-то подобное). Должен заметить, что соотношение правильного и не правильного считанного Ш/кода 50х50.
Железо не самое слабое 2Гб ОЗУ, DualCore 2.8 Celleron.... Ось Ubuntu 9.10, Lazarus 0.9.28.2, fpc 2.2.4
Тот же код под виндой и на том же компиляторе замечательно работает. Подскажите новичку, может обрабатывать события сканера надо как-то иначе или другим способом.
для проверки пробовал самый примитив
Код: Выделить всё
procedure TfmRegistration.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var str : string;
begin;
  case Key of
    $30..$39: str := str + chr( Lo(Key) );
    VK_RETURN:
        begin
          ShowMessage(str);
          key := 0;
        end; {Enter}
  end;
end;
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: сканер штрих кода под linux

Сообщение vladgri » 16.12.2009 15:42:52

Вынеси str из обработки
vladgri
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.11.2009 15:27:02

Re: сканер штрих кода под linux

Сообщение AnacRon » 17.12.2009 17:23:46

2vladgri
на самом деле str объявлено в глобальных переменных

проблема решилась сама собой обновился из git-репозитория до fpc 2.5.1 и lazarus 0.9.29
долго не стал разбираться почему, но работает.
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: сканер штрих кода под linux

Сообщение AnacRon » 20.12.2009 15:28:26

похоже я погорячился с выводами. так же не работает как положено. может дело в приоритете программы? подскажите как можно еще ожидать события от сканера?
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда

Re: сканер штрих кода под linux

Сообщение sign » 21.12.2009 21:04:33

Вообще-то операция конкатенации может быть весьма долгой и потому, запросто могут проглатываться коды.
Код: Выделить всё
const MaxLengthCode = 16;
var BB: array[0..MaxLenCode] of char;
    PosBB: integer;
...
PosBB := 1;  // Пишем с первого, в нулевом будем записывать длинны, если надо.
...

procedure TfmRegistration.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    $30..$39: begin
                Inc(PosBB);
                BB[PosBB] := chr( Lo(Key) );
                end;
    VK_RETURN: begin
                BB[0] := PosBB;
                ShowMessage(BB);
                PosBB := 0;
               end; {Enter}
  end;
end;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: сканер штрих кода под linux

Сообщение yuray » 22.12.2009 00:16:50

А это принципиально, чтобы форма обрабатывала события сканера? Я,например,обрабатываю с помощью TEdit вот так

Код: Выделить всё
procedure TForm.edtBarCodeKeyPress(Sender: TObject; var Key: char);
begin
  if (Key = #13) and (edtBarCode.Text <> EmptyStr) then
  begin
     ShowMessage(edtBarCode.Text);
  end;
end;


Два больших проекта работают без проблем под gtk1, gtk2 (Red Hat Enterprise Linux Client release 5.2) и win32.
Lazarus изменялся от 0.9.24 до 0.9.29.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: сканер штрих кода под linux

Сообщение AnacRon » 24.12.2009 15:37:32

yuray писал(а):А это принципиально, чтобы форма обрабатывала события сканера? Я,например,обрабатываю с помощью TEdit вот так

Код: Выделить всё
procedure TForm.edtBarCodeKeyPress(Sender: TObject; var Key: char);
begin
  if (Key = #13) and (edtBarCode.Text <> EmptyStr) then
  begin
     ShowMessage(edtBarCode.Text);
  end;
end;


Два больших проекта работают без проблем под gtk1, gtk2 (Red Hat Enterprise Linux Client release 5.2) и win32.
Lazarus изменялся от 0.9.24 до 0.9.29.

нет не принципиально события на TForm, просто с TEdit надо следить за фокусом, а именно это меня и отпугнуло первоначально, наверное придется к этой идее вернуться.
Аватара пользователя
AnacRon
новенький
 
Сообщения: 47
Зарегистрирован: 16.12.2009 11:09:09
Откуда: Караганда


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

Рейтинг@Mail.ru