Hilfe - Barcode-Scanner

  • Hi,

    habe mir eine GUI gebaut, die auf eine Zeichenfolge eines Barcode-Scanners reagieren sollte...
    Der Barcorde-Scanner schickt eine Zahlenkombination im Format "xxxxxx.yyyyyy" wobei die Zeichenzahl unterschiedlich lang sein kann.
    Abschließend schickt der Barcorde-Scanner auch eine "ENTER" als "Fertig-Meldung".

    Problem an der Sache ist, dass offenbar nicht immer das "ENTER" durch den Scanner vom Script akzeptiert wird...
    Mach ich den Scan ist Notepad, kein Problem. Ziffernfolge wird angezeigt und ein Enter wird "angefügt" und man landet in der nächsten Zeile.
    Mache ich den Scan auch im Scite wird der erste Scan ignoriert, der zweite setzt dann 2x die Zeichenfolge xxxxxx.yyyyyy ein und dann ein "ENTER".
    Nächste Zeile kommt dann 3x die Zeichenfolge xxxxxx.yyyyyy dann ein ENTER usw.

    Spoiler anzeigen

    Kann mal einer über den Code gucken, wo der Hund begraben liegt??? Ich vermute es liegt an _IsPressed?! Hat jemand eine andere (elegantere, bessere) Idee?

    Ziel ist es Barcode Scannen, den String aufgrund des Punktes splitten und diese beiden Werte weiter verwenden im Script... (Abfrage in einer DB, aufgrund des zweiten Wertes muss ein weiterer Wert aus der Datenbank abgefragt werden)

    Freue mich auf eure Ideen und Kritiken 8| ,

    Volumeman

  • Warum baust du in die GUI nicht einfach ein Input mit Autofokus, einen "Defaultpushbutton" und eine Edit in die als Event auf dem Button geschrieben wird?


    Idee dahinter:

    Durch Autofokus steht der Cursor automatisch in dem Input. Jedes Zeichen wird automatisch an das Input gesendet. => Die Zeichenfolge landet in dem Input.

    Durch den defaultpushbutton haben wir ein Control, dass auf Enter reagiert und damit ein Event auslöst. => Wir können jedes Enter als Ende einer Zeichenfolge sehen.

    In das Edit wird nun über das Event vom Button der Inhalt aus dem Input geschrieben und der Fokus erneut auf das Input gesetzt (den Fokus hat da aktuell der Button)

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Hi,
    generell ist es völlig egal, an welches Control du den String vom Scanner sendest.
    Wie von dir vermutet, ist das _ispressed() das Problem. Das brauchst du aber auch garnicht, da das @CRLF ja sowieso im String ist und dementsprechend abgefragt/verarbeitet werden kann.
    Du brauchst auch keinen extra Button und auch kein extra Event (obwohl es sicherlich ein ENTER-Event in der InputBox gibt)

  • @Andy
    Bezugnehmend auf die Zeile 25 vom Script, frage ich mich, was Du gescannt hast. Spontane viel mir ein "6-Pack". ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • @Alina, das war das Script des TE, ich habe nur einige Zeilen geändert so dass es funktioniert.

  • Hi,

    ich war sehr euphorisch heute morgen, hat sich alles sehr plausibel gelesen, aber leider funktioniert mein StringSplit dann nicht mehr.

    Der Consolewrite aus dem Case war auch nicht zu sehen... :| anbei Code mit Split-Funktion. Habe um überhaupt weiter zu kommen Case auf die Länge des Eingabesatzes größer/gleich 16 gemacht gehabt... (hier aber auskommentiert) *edit* funzt bescheiden habe ich heute festgestellt... ich glaube ich kommt um die DefaultButton dingens nicht rum... aber wie sieht sowas aus? Kann mir da adhoc nix drunter vorstellen...

    Mit der bitte um erneutes Bemühen
    :S

    Spoiler anzeigen

    2 Mal editiert, zuletzt von Sonderbaar (7. März 2016 um 10:49)

  • Dein Select Testet auftrags_nr falsch.
    Du musst prüfen ob der Rückgabewert von GuiGetMsg() gleich auftrags_nr ist.

  • Mein Script funktioniert mit diversen Scannern einwandfrei, ich bin daher hier raus...
    Eins noch, wenn man Scanneranwendungen für eine GUI schreibt, sollte man dem Fenster den TopMost-Modus gönnen, falls mobile Scanner eingesetzt und benutzt werden. Nichts ist ärgerlicher, als mit dem Scanner Barcodes einzulesen, an den Rechner zurückzukommen und dort festzustellen, dass ein freundlicher Kollege zwischenzeitlich ein anderes Programm bedient hatte...
    Ich habe u.a. daher auf Scanner mit Speicherfunktion zurückgegriffen, nach dem zurückkommen an den Rechner werden auf Knopfdruck alle Daten ausgelesen,

  • Der Thread ist zwar schon nicht mehr ganz frisch, aber ich denke, es gibt ein paar grundsätzlich erwähnenswerte Hinweise zu Scanner-Problemen:

    1) Man vergewissere sich, ob der Scanner so konfiguriert wurde, dass er am Ende wirklich CRLF sendet und nicht nur CR, oder LF.
    Oder gar LFCR ...
    Es ist eine sehr gute Idee und hat sich bestens bewährt, den Output eines Scanners zunächst mit einem geeigneten Terminalprogramm (bei seriellen Scannern) zu überprüfen, das auch Hexdarstellung beherrscht!
    Nur ein in Hex dargestellter String lügt nicht!
    "HTerm" ist dazu bestens geeignet: http://www.der-hammer.info/terminal/
    (Für USB-Scanner vielleicht direkt in einen Hexmonitor scannen).
    Man überprüfe penibel sowohl die exakte Anzahl der Zeichen, als auch das korrekte Zeilenende!

    2) Anschließend vergewissere man sich, dass das Programm, das den String empfängt, auch wirklich das gleiche Zeilenende haben will, das der Scanner sendet.
    Denn wenn der Scanner CRLF sendet, das jeweilige Programm aber bereits mit CR glücklich ist, dann wandert das "überflüssige" LF als führendes Zeichen in den nächsten String! Der nächste Barcode stimmt dann folglich nicht mehr, weil sich alles um ein Zeichen verschiebt.

    3) CRLF vom Scanner ist zwar praktisch, aber auch gefährlich! Ich hatte mal den Fall, dass Anwender meines Artikelverwaltungsprogrammes über ständigen Datenverlust klagten. 1000 Artikel gescannt, aber am Ende nur rund 800 neue Artikel in der Datenbank und solche Späße.
    Des Rätsels Lösung, der ich erst auf die Schliche kam, als ich den Leuten mal beim Arbeiten zusah: Der Bediener hatte zwischendurch einen Artikel aus der Datenbank gelöscht und den Mauszeiger einfach auf dem "Löschen"-Button stehen gelassen ...
    Da der Scanner am Ende CRLF sendete, was den Button "betätigte"(!) wurde mit jedem weiteren Scan daher ein weiterer Artikel aus der DB gelöscht!
    Und die Leute haben es gar nicht bemerkt, sondern einfach "blind" weiter gescannt!
    (Die Dialogbox "Löschen bestätigen" ist zuvor natürlich wegkonfiguriert worden, "weil die dauernd nervte"!)

    4) Man berücksichtige den Fall, dass das, was vom Scanner kommt, nicht unbedingt EAN-13 ist.
    Bei manchen Artikeln kommen auch (zumeist) kürzere, oder (seltener) längere Barcodes zum Einsatz.
    Das empfangende Programm darf dann nicht stur auf eine bestimmte Zeichenzahl eingestellt sein.

    Erst wenn all das überprüft wurde, kann man sich gezielt ans Programmieren machen, andernfalls erlebt man womöglich immer wieder tolle Überraschungen.

    Ich code, also bin ich!