Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Scannereingaben in Datenbank schreiben (https://www.delphipraxis.net/167196-scannereingaben-datenbank-schreiben.html)

DelphiManiac 17. Mär 2012 09:20

Delphi-Version: 5

Scannereingaben in Datenbank schreiben
 
Hallo,
ich habe zurzeit folgendes Problem.

Ich habe eine Prüfsoftware die durch eine Scannereingabe einen Prüfling startet.
Bisher hatte ich ein Editfeld, dass den Fokus hatte und der Scanner hat am Ende ein Return gesendet, danach ging der Prüfvorgang los.
Jetzt will ich dass mehrere Prüflinge eingescannt werden können, auch wenn der Prüfvorgang gerade läuft (im Hintergrund merke ich mir die Barcodes in einer DB).

Ich muss hierfür ja einen Thread nutzen, da ich auch wenn die Prüfung läuft im Mainthread die Scannereingaben verarbeiten will. Jetzt ist meine Frage wie kann ich das am
besten bewerkstelligen, ich habe mich mit GetAsyncKeyState probiert, aber da bekomme ich ja nur das erste Zeichen?!...

Was wäre denn da der beste Weg? Ein Tastaturhook?

Danke.
Gruß
DM

Furtbichler 17. Mär 2012 09:23

AW: Scannereingaben in Datenbank schreiben
 
Wenn das Formular den Focus hat, setzt Du MyForm.KeyPreview := true und schaust mal nach, was im OnKeyDown / OnKeyPress so alles ankommt.

Sir Rufo 17. Mär 2012 10:15

AW: Scannereingaben in Datenbank schreiben
 
Wenn das Eingabefeld weiterhin den Focus hat und die Verarbeitung in einem separaten Thread läuft, dann musst du gar nichts mehr machen, dann läuft das so ...

Ich vermute, dass du nicht dafür sorgst, dass das Edit-Feld den Focus behält

Hmmm, ich hoffe du willst nicht die Tastatur-Eingabe in dem Thread direkt verarbeiten?
Nach erfolgter Eingabe in dem Edit-Feld wird der Thread zur Verarbeitung erzeugt und dann ist das Formular und das Edit-Feld zu neuen Schandtaten bereit. Mehr braucht es da nicht.

Bummi 17. Mär 2012 12:12

AW: Scannereingaben in Datenbank schreiben
 
Ein anderer Scanner der z.B. per serieller Schnittstelle die Daten liefert?

Furtbichler 17. Mär 2012 12:13

AW: Scannereingaben in Datenbank schreiben
 
Ich würde dem Anwender nicht zumuten wollen, das er vor dem Scan den Focus auf ein Eingabefeld setzen muss. Die direkte Folge davon ist nämlich, das ein Scan ins Leere geht, wenn das mal vergessen wurde.

Scanner senden gerne einen (programmierbaren Prefix), sodaß aus Sicht des Eingabefelds bzw. des Formulares, ein Scan des Barcodes 'ABC' von mir aus '$ABC<Return>' sein kann, wobei '$' für irgendein Zeichen steht.

Wenn man dann das Zeichen so wählt (z.B. $001), das es nicht über die Tastatur eingebbar ist, dann wartet man im OnKeyDown des Formulars nur auf dieses Zeichen, schneidet alles bis zum 'Return' mit und startet dann den Thread. Der Vollständigkeit halber kann man den Scan noch ins Eingabefeld schreiben, oder in ein Infofeld.

Am Liebsten sind mir jedoch Scanner, die über eine serielle Schnittstelle anzuschließen sind. Dann kann man viel direkter auf einen Scan reagieren.

Einmal war die Anforderung, einen Scan auch dann durchzuführen, wenn auf dem PC z.B. Word läuft. Also habe ich dann einen globalen Tastaturhook geschrieben, der die Keyboardeingaben auf die Prefix-Sequenz (war mehr als ein Zeichen) des Scanners überprüft und dann eine entsprechen Message an die Zielapplikation schickt.

Sir Rufo 17. Mär 2012 12:50

AW: Scannereingaben in Datenbank schreiben
 
Nun ja mit einem USB-Scanner geht das quasi auch wie mit dem seriellen Scanner.
Man prüft einfach ab über welches USB Device die Eingaben kommen und verarbeitet diese dann entsprechend.

Furtbichler 17. Mär 2012 17:32

AW: Scannereingaben in Datenbank schreiben
 
Zitat:

Zitat von Sir Rufo (Beitrag 1157069)
Nun ja mit einem USB-Scanner geht das quasi auch wie mit dem seriellen Scanner.
Man prüft einfach ab über welches USB Device die Eingaben kommen und verarbeitet diese dann entsprechend.

Ach so. Ich dachte, das wird transparent als Keystroke übermittet. Hast Du zufällig Code oder nen Link?

DelphiManiac 17. Mär 2012 17:50

AW: Scannereingaben in Datenbank schreiben
 
Hallo Danke für die vielen Antworten.

Ja genau ich nutze auch ein Prefix (*) für den Scanner um zu erkennen, dass jetzt Daten vom Scanner kommen.
Aber am liebsten wäre mir wahrscheinlich wirklich die Routine im Hintergrund, da es entkoppelt sein.

Zurzeit fackel ich das über den Form ab.

DelphiManiac 17. Mär 2012 17:53

AW: Scannereingaben in Datenbank schreiben
 
Zur Info es ist ein USB-Scanner den ich quasi als Tastaturersatz nutze.
Wie könnte ich de

Wenn man dann das Zeichen so wählt (z.B. $001), das es nicht über die Tastatur eingebbar ist, dann wartet man im OnKeyDown des Formulars nur auf dieses Zeichen, schneidet alles bis zum 'Return' mit und startet dann den Thread. Der Vollständigkeit halber kann man den Scan noch ins Eingabefeld schreiben, oder in ein Infofeld.
nn das am Besten machen?

also ich meine die Methoden um die Eingaben im Thread zu empfangen...

Sir Rufo 17. Mär 2012 18:01

AW: Scannereingaben in Datenbank schreiben
 
Wieso willst du die Eingaben im Thread empfangen? Das macht doch keinen Sinn.
Nimm die Daten über den Hauptthread entgegen undd erzeuge dann einen Thread, der sich um die Verarbeitung kümmert.

Den Code muss ich mal raussuchen - es gibt da nur einen POC , aber einen funktionierenden :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Seite 1 von 2  1 2      

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