Delphi-PRAXiS

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?

Hansa 13. Okt 2010 12:02

AW: handcanner an USB
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055524)
..unabhängig wo sich der Focus in der Anwendung befindet.

Eben das ist das Problem. Der Scanner macht aber nur Sinn im Art.Nr.-Feld. Du willst ja wohl kaum einen 13-stelligen EUR-Betrag für irgendwas bezahlen, oder doch ? :shock: Ich glaube, das wäre sogar Bill Gates zu viel. :mrgreen: Für Mengen gilt dasselbe. Insofern macht es keinen Sinn für Mengen, Preise etc. so grosse Zahlen überhaupt zuzulassen.

khh 13. Okt 2010 12:06

AW: handcanner an USB
 
Zitat:

Zitat von Hansa (Beitrag 1055539)
Zitat:

Zitat von Sir Rufo (Beitrag 1055524)
..unabhängig wo sich der Focus in der Anwendung befindet.

Eben das ist das Problem. Der Scanner macht aber nur Sinn im Art.Nr.-Feld. Du willst ja wohl kaum einen 13-stelligen EUR-Betrag für irgendwas bezahlen, oder doch ? :shock: Ich glaube, das wäre sogar Bill Gates zu viel. :mrgreen: Für Mengen gilt dasselbe. Insofern macht es keinen Sinn für Mengen, Preise etc. so grosse Zahlen überhaupt zuzulassen.

eben,
deshalb wollte ich der Einfachheit halber den Fokus aufs EAN-Feld setzen und dort einlesen, fertig :-)
Dazu braucht das Feld aber den Fokus.
Wobei EAN und Art.-Nr auch in dem meisten Fällen unterschiedlich sind.

Sir Rufo 13. Okt 2010 12:18

AW: handcanner an USB
 
Zitat:

Zitat von Hansa (Beitrag 1055539)
Zitat:

Zitat von Sir Rufo (Beitrag 1055524)
..unabhängig wo sich der Focus in der Anwendung befindet.

Eben das ist das Problem. Der Scanner macht aber nur Sinn im Art.Nr.-Feld. Du willst ja wohl kaum einen 13-stelligen EUR-Betrag für irgendwas bezahlen, oder doch ? :shock: Ich glaube, das wäre sogar Bill Gates zu viel. :mrgreen: Für Mengen gilt dasselbe. Insofern macht es keinen Sinn für Mengen, Preise etc. so grosse Zahlen überhaupt zuzulassen.

Du hast mich da nicht verstanden

Wenn über den Barcode-Scanner etwas in den Rechner reinkommt, dann muss das als Barcode interpretiert werden
Kommt etwas über die Tastatur, dann muss es abhängig vom Focus interpretiert werden

Kleines Beispiel für eine Kassenanwendung wo genau das Sinn macht:

(auf der Form ist eine Liste mit den gescannten Artikeln und ein Eingabe/Editierbereich für Barcode, Menge, Preis)

Ein Artikel wird gescannt -> ab in die Liste und im Eingabebereich werden die Felder gefüllt (Menge Default 1)
Der Kassierer kann jetzt ganz einfach die Menge oder den Preis korrigieren
Scannt der Kassierer jetzt wieder, wird automatisch wieder ein neuer Artikel hinzugefügt egal in welchem eingabefeld der stehen geblieben ist.

Aus diesem Grund ist es sehr interessant zu erfahren/wissen, dass die Eingabe/Information vom Barcode-Scanner gekommen ist

Hansa 13. Okt 2010 12:27

AW: handcanner an USB
 
Zitat:

Zitat von khh (Beitrag 1055541)
Wobei EAN und Art.-Nr auch in dem meisten Fällen unterschiedlich sind.

Die dürften immer unterschiedlich sein, zumindest wenn es eigene Art.Nummern gibt. Allerdings : ich lese zwischen den Zeilen, dass es eventuell zwei Felder geben könnte. Jeweils eines für Art.Nr. und EAN ? :glaskugel: Warum das ?

Normalerweise läuft das so : 1. Cursor steht im Art.-Nr.-Feld und man weiss die Art.-Nr und gibt sie ein. 2. Scanner liest die EAN-Nr. und ermittelt dafür den entsprechenden Artikel. Ich zeige dann die "eigene" Nr. an, weil sich die lange EAN-Nr. sowieso keiner merken kann. Dann wird die Menge eingegeben und fertig. Oder (siehe Supermärkte) : Menge ist standardmässig 1. Selbst bei 10 gleichen Artikeln ziehen die jeden einzeln über den Scanner. Wo liegt jetzt da das Problem ?

@Sir Rufo (roter Kasten) : dann lässt Du denen IMHO zuviel Freiheiten, Dummheiten zu machen. :mrgreen: Am POS würde ich auch niemals zulassen, dass der, der da gerade ist, eigenmächtig Preise ändern kann. :shock: Tja, es gibt genügend Bekannte, die kriegen dann irgendwas billiger oder wie ? 8-) Ist der Mengenwert sowieso immer 1, dann braucht man eigentlich nur die Art./EAN-Nr.

Sir Rufo 13. Okt 2010 12:35

AW: handcanner an USB
 
@Hansa

Wie ich sehe, hast du keine Erfahrung im Einzelhandel (dort ist die Möglichkeit der Preisänderung zwingend erforderlich - Stichwort falscher VK in der DB)

Außerdem war es nur als Beispiel gedacht, um zu verdeutlichen, was ich mit dem Kontext meinte und warum bei meiner Darstellung ein Barcode vom Scanner eben nicht als VK-Preis interpretiert wird (so man denn weiß, dass er vom Scanner kommt, denn dann ist der Kontext klar - es ist ein Barcode)

Aber wir gleiten gerade sanft ins OT ab

khh 13. Okt 2010 12:57

AW: handcanner an USB
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055552)
@Hansa



Aber wir gleiten gerade sanft ins OT ab

um dem entgegenzuwirken, nochmal die Frage.
Wenn ohne Focus auf dem Editfeld, wie macht es dann am meisten Sinn den Barcode zu lesen?

im keydown des form, und von da aus weiterverarbeiten?

Sir Rufo 13. Okt 2010 13:05

AW: handcanner an USB
 
Wie möchtest du denn jetzt den Barcode vom Scanner abgreifen?

Mit GetRawInputData oder nicht?

khh 13. Okt 2010 16:00

AW: handcanner an USB
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055570)
Wie möchtest du denn jetzt den Barcode vom Scanner abgreifen?

Mit GetRawInputData oder nicht?

ja, ich denke das ist das Beste

Sir Rufo 13. Okt 2010 16:19

AW: handcanner an USB
 
Die ganz billige Variante ist in der Methode RawInputMessage den Focus auf das Eingabefeld zu setzen.
Aber auch nur dann, wenn das Feld den Focus nicht hat ;)

Ansonsten musst du dir alle Zeichen von dem Scanner merken bis das Ende-Zeichen kommt idR #13 (dabei immer die Message vernichten, sonst gehen die Eingaben weiter durch) und dann den gesamten String übergeben

khh 13. Okt 2010 16:31

AW: handcanner an USB
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055623)
Die ganz billige Variante ist in der Methode RawInputMessage den Focus auf das Eingabefeld zu setzen.
Aber auch nur dann, wenn das Feld den Focus nicht hat ;)

Ansonsten musst du dir alle Zeichen von dem Scanner merken bis das Ende-Zeichen kommt idR #13 (dabei immer die Message vernichten, sonst gehen die Eingaben weiter durch) und dann den gesamten String übergeben

werd ich so probieren, sobald ich es geschafft habe die umfangreichen Includes in den Zugriffpfad zu bekommen :-)

Sir Rufo 13. Okt 2010 16:34

AW: handcanner an USB
 
Zitat:

Zitat von khh (Beitrag 1055625)
Zitat:

Zitat von Sir Rufo (Beitrag 1055623)
Die ganz billige Variante ist in der Methode RawInputMessage den Focus auf das Eingabefeld zu setzen.
Aber auch nur dann, wenn das Feld den Focus nicht hat ;)

Ansonsten musst du dir alle Zeichen von dem Scanner merken bis das Ende-Zeichen kommt idR #13 (dabei immer die Message vernichten, sonst gehen die Eingaben weiter durch) und dann den gesamten String übergeben

werd ich so probieren, sobald ich es geschafft habe die umfangreichen Includes in den Zugriffpfad zu bekommen :-)

Hmmmm, ich habe das aus dem SVN ausgecheckt und den Win32API Pfad eingetragen fertisch
Ausgecheckt ab hier

khh 13. Okt 2010 16:40

AW: handcanner an USB
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055626)
Zitat:

Zitat von khh (Beitrag 1055625)
Zitat:

Zitat von Sir Rufo (Beitrag 1055623)
Die ganz billige Variante ist in der Methode RawInputMessage den Focus auf das Eingabefeld zu setzen.
Aber auch nur dann, wenn das Feld den Focus nicht hat ;)

Ansonsten musst du dir alle Zeichen von dem Scanner merken bis das Ende-Zeichen kommt idR #13 (dabei immer die Message vernichten, sonst gehen die Eingaben weiter durch) und dann den gesamten String übergeben

werd ich so probieren, sobald ich es geschafft habe die umfangreichen Includes in den Zugriffpfad zu bekommen :-)

Hmmmm, ich habe das aus dem SVN ausgecheckt und den Win32API Pfad eingetragen fertisch
Ausgecheckt ab hier

dann mach ich mal nen neuen versuch, sieht mir hier viel übersichtlicher aus, als in meinem Zipfile

Sir Rufo 13. Okt 2010 16:48

AW: handcanner an USB
 
Ja, war mir auch zu wuselig und ich wollte auch einfach nur die Units haben, ohne die Packages zu installieren. Und via SVN kann man wesentlich leichter up-/downgraden :)

Hansa 13. Okt 2010 20:56

AW: handcanner an USB
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055552)
Wie ich sehe, hast du keine Erfahrung im Einzelhandel (dort Möglichkeit der Preisänderung zwingend erforderlich - Stichwort falscher VK in der DB)

Nun ja, 25 Jahre Erfahrung lasse ich mir nicht einfach abnehmen. C'est la vie. 8-) Der Fragesteller soll mal das konkrete Problem schildern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr.

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