Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   handcanner an USB (https://www.delphipraxis.net/155213-handcanner-usb.html)

khh 13. Okt 2010 10:08

handcanner an USB
 
Hallo zusammen,
die Übergabe eines Strichcodes per Scanner am USB funktioniert ja kinderleicht, wenn das den Wert aufnehmende Tedit den Focus hat.

Ist es möglich den Focus erst dann auf ein bestimmtes Eingabeelement (Tedit) zu setzen, wenn vom Scanner Daten kommen?

Woran ist das festzumachen?

Gruss KHH

Sir Rufo 13. Okt 2010 10:16

AW: handcanner an USB
 
So erst mal gar nicht, der verhält sich idR wie eine Tastatur.

Für einige Scanner gibt es aber auch OPOS-Treiber/Software, damit kann man diese wesentlich besser beeinflussen. Der ScanCode wird dann aber nicht mehr als Tastatureingabe übermittelt, sondern über die OPOS Schnittstelle.

Alternativ kann man dem Scanner auch beibringen, vor dem ScanCode ein bestimmtes Zeichen zu senden (wird pro Barcode-Typ definiert). Auf dieses/diese Zeichen kannst du ja warten/reagieren.

Am besten ist es aber die Zeichen vor dem Edit abzufangen TForm.KeyPreview und dann anhand des ersten Zeichens zu entscheiden, was kommt da. Dann bei Bedarf das entsprechende Edit-Feld damit befüllen.

Einen Haken haben die USB-Scanner: Tippt man während des Scanvorgangs auf der Tastatur rum, werden uU die Eingaben vermischt. Mit OPOS passiert das nicht, ist aber auch - wie sollte es anders sein - umständlicher zu implementieren.

khh 13. Okt 2010 10:18

AW: handcanner an USB
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055504)

Am besten ist es aber die Zeichen vor dem Edit abzufangen TForm.KeyPreview und dann anhand des ersten Zeichens zu entscheiden, was kommt da. Dann bei Bedarf das entsprechende Edit-Feld damit befüllen.


danke dir, ich denke das ist das Einfachste und wohl auch Sicherste

Reinhard Kern 13. Okt 2010 10:19

AW: handcanner an USB
 
Zitat:

Zitat von khh (Beitrag 1055503)
Hallo zusammen,
die Übergabe eines Strichcodes per Scanner am USB funktioniert ja kinderleicht, wenn das den Wert aufnehmende Tedit den Focus hat.

Ist es möglich den Focus erst dann auf ein bestimmtes Eingabeelement (Tedit) zu setzen, wenn vom Scanner Daten kommen?

Woran ist das festzumachen?

Gruss KHH

Hallo,

garnicht. Es macht keinen Unterschied, ob die Zeichen vom Scanner kommen oder von der Tastatur oder gemischt (z.B. Zahlen vom Scanner und CR-Taste). Das ist der Vor- und der Nachteil dieser Arbeitsweise.

Du kannst höchstens prüfen, ob der Scanner umstellbar ist z.B. auf V24. Aber dann brauchst du Software dazu.

Du könntest natürlich den Focus immer auf das Editfeld geben, aber das ist wohl anderweitig unpraktisch.

Gruss Reinhard

Bummi 13. Okt 2010 10:34

AW: handcanner an USB
 
Ich finde nicht die Zeit alles zu erklären, geht:


Du benötigst JWAWinUser

ladbar unter http://sourceforge.net/projects/jedi-apilib/files/

ein Fetzen Code aus einer unserer Anwendungen...

hoffe Du kommst klar

Delphi-Quellcode:
procedure TMyForm.RawInputMessage(var Message: TMessage);
var
  dwSize : UINT;
  raw : RAWINPUT;
  buffer: array[0..255] of char;
  buffersize:dword;
  result:dword;
begin
  dwSize := sizeof(RAWINPUT);
  GetRawInputData(Message.lParam, RID_INPUT, @raw, dwSize, sizeof(RAWINPUTHEADER));

  if (raw.header.dwType = RIM_TYPEKEYBOARD) then begin
    buffersize := 256;
    result := GetRawInputDeviceInfo(raw.header.hDevice, RIDI_DEVICENAME, @buffer, buffersize);
    if (result > 0) and (FScannerKey = buffer) then
      CaptureAmountForArticle(Chr(raw.keyboard.VKey));
  end;
end;

khh 13. Okt 2010 10:36

AW: handcanner an USB
 
danke euch, ich schau es mir durch

Sir Rufo 13. Okt 2010 10:56

AW: handcanner an USB
 
Hab da im Netz auch etwas (mehr) Code zu gefunden, basiert aber auf dem gleichen Ansatz mit Erläuterung

http://meinews.niuz.biz/wie-t60980.html

Hansa 13. Okt 2010 11:28

AW: handcanner an USB
 
Zitat:

Zitat von khh (Beitrag 1055503)
Ist es möglich den Focus erst dann auf ein bestimmtes Eingabeelement (Tedit) zu setzen, wenn vom Scanner Daten kommen?

Wozu das überhaupt ? :shock: Willst Du nur wissen, ob die Eingabe vom Scanner kommt oder Tastatur ? Für mich macht das nur Sinn, wenn geklärt werden muss, ob die Eingabe über EAN-Nr. (also Scanner) kam oder von Hand eingegeben wurde. Im ersten Fall suche ich dann Artikel über EAN-Tabelle, ansonsten über normale Art.Nr. Du willst ja hoffentlich nicht verhindern, dass EAN-Nr. von Hand eingegeben wird ? Manchmal sind die Strichcodes zerrissen, wellig etc. zumindest nicht lesbar. Na und ? Sofern die Nr. noch zu lesen ist, soll man dann nicht zulassen, dass sie auch von Hand eingegeben werden können ?

Edit : Ist length (TEdit.Text) >= 8 dann ist es wohl EAN-Nr.

Sir Rufo 13. Okt 2010 11:34

AW: handcanner an USB
 
Wenn die Eingabe vom Scanner kommt, dann bezieht sich die Eingabe auf einen Barcode und zwar unabhängig wo sich der Focus in der Anwendung befindet.

Eine Tastatureingabe bekommt den Kontext über den Focus.
z.B. Artikelnr, Barcode, Preis, etc.

khh 13. Okt 2010 11:56

AW: handcanner an USB
 
Zitat:

Zitat von Hansa (Beitrag 1055523)
Zitat:

Zitat von khh (Beitrag 1055503)
Ist es möglich den Focus erst dann auf ein bestimmtes Eingabeelement (Tedit) zu setzen, wenn vom Scanner Daten kommen?

Wozu das überhaupt ? :shock: Willst Du nur wissen, ob die Eingabe vom Scanner kommt oder Tastatur ? Für mich macht das nur Sinn, wenn geklärt werden muss, ob die Eingabe über EAN-Nr. (also Scanner) kam oder von Hand eingegeben wurde. Im ersten Fall suche ich dann Artikel über EAN-Tabelle, ansonsten über normale Art.Nr. Du willst ja hoffentlich nicht verhindern, dass EAN-Nr. von Hand eingegeben wird ? Manchmal sind die Strichcodes zerrissen, wellig etc. zumindest nicht lesbar. Na und ? Sofern die Nr. noch zu lesen ist, soll man dann nicht zulassen, dass sie auch von Hand eingegeben werden können ?

Edit : Ist length (TEdit.Text) >= 8 dann ist es wohl EAN-Nr.

nee, natürlich sollen die Codes auch manuell eingegeben werden können.
Ich wollte den Fokus beim Scan aufs edit-feld legen, um diesen darin auf dem BS anzuzeigen und daraus zu übernehmen.
sollte ich den lieber vorher abfangen und verarbeiten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz