![]() |
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 |
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.
|
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. |
AW: Scannereingaben in Datenbank schreiben
Ein anderer Scanner der z.B. per serieller Schnittstelle die Daten liefert?
|
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. |
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. |
AW: Scannereingaben in Datenbank schreiben
Zitat:
|
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. |
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... |
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 21:37 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 by Thomas Breitkreuz