Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2013-03

TForm.OnKeyPress event missing some characters using usb barcode reader

2 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

byungho jeon

I'm using CodeTyphon 4.10 on ubuntu mint 14 desktop (x86-64)
- CodeTyphon 4.10 = FPC 2.7.1, Lazarus 2013-03-25 SVN 40461CT x86_64-linux-gtk2

Barcode reader is MOTOROLA DS3578 with FIPS model (configed HID Keyboard Emulation, USB Type)

I make reader code using TForm.KeyPreview property.

1. There is main form. (Keypreview := True)
2. Make OnKeyPress event handler
3. Read a sample QRCode ( http://localhost/qrcode/Test_2012/A001 )
4. OnKeyPress missing some characters.
-> Readed -> http://localhost/qrcode/est2012/001
-> Missed capital character(T, A) and under bar character(_) -> Lower case character is no problem.

When I read barcode(qrcode) focus to text editor like pluma, qrcode data is inserted correctly without missing characters.

Here is test project main form unit source code:

//----------------------------------- SAMPLE CODE
unit Unit1;
{$mode objfpc}{$H+}
interface

uses
Classes, SysUtils, FileUtil, ubarcodes, Forms, Controls, Graphics, Dialogs,

  StdCtrls, LCLType;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: char);
  private
    FBuffer: string;
  public
    { public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := True;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  FBuffer += Key;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(FBuffer);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  FBuffer := '';
end;

end.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus/attachments/20130325/1d94dee6/attachment.html>

Reply by email

Bernd
to byungho jeon

I can confirm this behavior with Lazarus 1.6 (gtk2) / FPC 3.0 on Xubuntu 16.04.

Typing keys rapidly (even by hand with a normal keyboard) will make it lose keypress events occasionally, using a barcode reader (it emulates an USB-Keyboard) through the KeyPress event is virtually impossible with Gtk2-LCL. No problems on Windows.

Bypassing the LCL and binding a handler directly to the gtk signal proves that gtk will fire events for *all* keys, no matter how rapidly the keyboard will send them, its just LCL that is missing some of them :-(

2013-03-25 14:17 GMT+01:00 byungho jeon :

Show quoted text 88 lines
I'm using CodeTyphon 4.10 on ubuntu mint 14 desktop (x86-64) - CodeTyphon 4.10 = FPC 2.7.1, Lazarus 2013-03-25 SVN 40461CT x86_64-linux-gtk2 Barcode reader is MOTOROLA DS3578 with FIPS model (configed HID Keyboard Emulation, USB Type) I make reader code using TForm.KeyPreview property. 1. There is main form. (Keypreview := True) 2. Make OnKeyPress event handler 3. Read a sample QRCode ( http://localhost/qrcode/Test_2012/A001 ) 4. OnKeyPress missing some characters. -> Readed -> http://localhost/qrcode/est2012/001 -> Missed capital character(T, A) and under bar character(_) -> Lower case character is no problem. When I read barcode(qrcode) focus to text editor like pluma, qrcode data is inserted correctly without missing characters. Here is test project main form unit source code: //----------------------------------- SAMPLE CODE unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, ubarcodes, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLType; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: char); private FBuffer: string; public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin KeyPreview := True; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: char); begin FBuffer += Key; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(FBuffer); end; procedure TForm1.Button2Click(Sender: TObject); begin FBuffer := ''; end; end. -- _______________________________________________ Lazarus mailing list http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply by email