![]() |
FNC1 Trennzeichen auswerten beim Data Matrix Code
Hallo zusammen,
ich brauche eure Hilfe beim Auswerten des FNC1/GS1 Trennzeichens/Application Identifiers im Data Matrix Code. Ich scanne den Data Matrix Code eines Artikels in ein Editfeld, aber kann es weder per OnKeyDown
Code:
auswerten, noch das Trennzeichen im Editfeld sehen.
edit17.text := stringreplace(edit17.Text, #$1D, '#',[rfReplaceAll])
Man sieht dann 01000000022420491720020010294420621DC175267703399 im Editfeld. Nehme ich Notepad2 sehe ich 010000000224204917200200102944206(GS)21DC175267703 399 alles korrekt. Kann mir jemand helfen? |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Hmm..
Da das $1D kein 'visuelles' Zeichen hat, kommt es beim Edit auch nicht zur Anzeige und somit nicht in den String. Gehe mal hin und verwende OnKeyDown zur Konvertierung in ein Anzeigbares...
Delphi-Quellcode:
Damit würde das (GS) durch ein Anzeigbares # ersetzt, für später sollte aber ein Zeichen verwendet werden, welches Lt. GS1 Spezifikation nicht in einem dynamischen String vorkommen darf.
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if Key = $1D then Key := Ord('#'); end; Das Notepad2 ersetzt für die Anzeige das Zeichen durch '(GS)' als Platzhalter.. |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Code:
funktioniert leider nicht.
if Key = $1D then Key := Ord('#');
Also das Ersetzen durch die # bekomme ich hin, die Quizfrage ist nur: Wie kann ich den DM Code vom Scanner direkt in eine Variable schreiben? Denn scanne ich erst ins Editfeld und kopiere den Text dann in eine Varibale, wird das Trennzeichen nicht mitkopiert (klar, ist ja sicht sichtbar). Wenn ich aus dem Notepad2 diesen einen DM Code ins Edit rein und wieder raus kopiere, bleibt das GS Trennzeichen erhalten. Scanne ich den gleichen DM Code per Scanner ein, und kopiere es raus ins Notpad2, sehe ich kein GS Trennzeichen. Das bedeutet, dass das Edit irgendetwas mit dem Scantext macht, wenn man einscannt. Es aber nicht macht, wenn man kopiert. Deswegen muss ich das DM Code vom Scanner irgendwie ums Edit herum bekommen, dann verarbeiten und dann erst anzeigen. Und da habe ich gerade eine Denkblockade... |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Hmm..
Eigentlich sollten alle Chars bei OnKeyDown am Edit ankommen, auch Steuerzeichen, sprich Chars < #32. Bis Du dir sichen, das auch wiklich $1D vom Scanner gesendet wird ? Tausche mal OnKeyDown gegen aus:
Delphi-Quellcode:
Dann sollten alle Steuerzeichen als # ausgegeben werden (auch das abschließende #13)
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if Key < 32 then Key := Ord('#'); end; Alternativer Weg: Welchen Scanner nutzt Du denn? Die meisten können umkonfiguriert werden und haben die Option statt des $1d gleich ein 'sichtbares' ASCII-Zeichen für das FNC einzusetzen. |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Das mit dem Umkonfigurieren geht leider nicht, da ich nur Drittanbieter wäre. Die hängen an einem WaWi-System dran...
Was micht etwas wundert:
Code:
ignoriert er komplett. Auch auf der Tastatur kann ich
if Key < 32 then Key := Ord('#');
enter oder alt etc drücken und er zeigt keine # an. Ist sehr dubios... Ist ein Honeywell ms7580. Zitat:
Es muss am Edit liegen... |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Nimm ein Memo-Feld oder gar kein Eingabe-Control und lese die Daten per Form.KeyPress ein oder lese die Daten direkt vom USB Device, bereite diese auf wie benötigt und schreibe diese dahin wo benötigt.
Und dann gibt es noch ![]() |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Hmm..
Packe Dir mal nen Memo neben das Edit und schreib im OnKeyDown den HexWert des Keys ins Memo, somit solltest Du alle Zeichen erhalten und kannst erkennen, was der Scanner schickt... Eventuell statt OnKeyDown das OnKeyPress verwenden... |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Zitat:
Aber wie kann ich das weiterverarbeiten ^^ für ein bsp wäre ich dankbar, zbsp wie ich den geänderten Text in einen sring packe. mit var test: string; test := Edit1.text will er nicht ganza machen damit ichs weiter verarbeiten kann bzw kann folgende Procedure in eine Function geändert werden? Hab es nicht wirklich hinbekommen.
Code:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if Sender is TEdit then begin case Key of #29: begin TEdit(Sender).SelText := '↔'; end; end; end; end; |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Aufpassen was selektiert ist
und beim Abfangen von Eingaben nicht vergessen es auch wirklich abzufangen, also
Delphi-Quellcode:
.
Key := 0; // bzw #0
Wer Diese sichtbar haben will, braucht einfach nur $2400 dazu addieren (#00 bis #31 / #$1F, zzgl. #32 aka Leerzeichen), was aber nur gut geht, wenn man einen Font hat, wo diese Zeichen enthalten sind. ![]() ![]() ![]() War ↔ nicht die #27 aka ESC ? scheint aber die 29 gewesen zu sein. Nja, da es eh kein "sichtbares " Zeichen ist, kommt es auf den Zeichensatz drauf an, ob und was es da für ein Zeichen hat. Mir war so bei Honeywell die #26 gesehen zu haben :gruebel: |
AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
Zitat:
Wie ist das gemeint? > Aufpassen was selektiert ist und beim Abfangen von Eingaben nicht vergessen es auch wirklich abzufangen, also
Delphi-Quellcode:
Key := 0; // bzw #0
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 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