AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Scannereingaben in Datenbank schreiben

Ein Thema von DelphiManiac · begonnen am 17. Mär 2012 · letzter Beitrag vom 18. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 09:20
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 09:23
Wenn das Formular den Focus hat, setzt Du MyForm.KeyPreview := true und schaust mal nach, was im OnKeyDown / OnKeyPress so alles ankommt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 10:15
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (17. Mär 2012 um 10:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 12:12
Ein anderer Scanner der z.B. per serieller Schnittstelle die Daten liefert?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 12:13
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 12:50
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 17:32
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?
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#8

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 17:50
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.
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#9

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 17:53
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...

Geändert von DelphiManiac (17. Mär 2012 um 17:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Scannereingaben in Datenbank schreiben

  Alt 17. Mär 2012, 18:01
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.
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