![]() |
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 |
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. |
AW: handcanner an USB
Zitat:
danke dir, ich denke das ist das Einfachste und wohl auch Sicherste |
AW: handcanner an USB
Zitat:
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 |
AW: handcanner an USB
Ich finde nicht die Zeit alles zu erklären, geht:
Du benötigst JWAWinUser ladbar unter ![]() 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; |
AW: handcanner an USB
danke euch, ich schau es mir durch
|
AW: handcanner an USB
Hab da im Netz auch etwas (mehr) Code zu gefunden, basiert aber auf dem gleichen Ansatz mit Erläuterung
![]() |
AW: handcanner an USB
Zitat:
Edit : Ist length (TEdit.Text) >= 8 dann ist es wohl EAN-Nr. |
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. |
AW: handcanner an USB
Zitat:
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? |
AW: handcanner an USB
Zitat:
|
AW: handcanner an USB
Zitat:
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. |
AW: handcanner an USB
Zitat:
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 |
AW: handcanner an USB
Zitat:
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. |
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 |
AW: handcanner an USB
Zitat:
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? |
AW: handcanner an USB
Wie möchtest du denn jetzt den Barcode vom Scanner abgreifen?
Mit GetRawInputData oder nicht? |
AW: handcanner an USB
Zitat:
|
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 |
AW: handcanner an USB
Zitat:
|
AW: handcanner an USB
Zitat:
Ausgecheckt ab ![]() |
AW: handcanner an USB
Zitat:
|
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 :)
|
AW: handcanner an USB
Zitat:
|
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