Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FNC1 Trennzeichen auswerten beim Data Matrix Code (https://www.delphipraxis.net/201828-fnc1-trennzeichen-auswerten-beim-data-matrix-code.html)

Dr. Jack 31. Aug 2019 15:47


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:
edit17.text := stringreplace(edit17.Text, #$1D, '#',[rfReplaceAll])
auswerten, noch das Trennzeichen im Editfeld sehen.
Man sieht dann 01000000022420491720020010294420621DC175267703399 im Editfeld. Nehme ich Notepad2 sehe ich 010000000224204917200200102944206(GS)21DC175267703 399 alles korrekt.
Kann mir jemand helfen?

HolgerX 31. Aug 2019 16:04

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:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = $1D then Key := Ord('#');
end;
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.

Das Notepad2 ersetzt für die Anzeige das Zeichen durch '(GS)' als Platzhalter..

Dr. Jack 31. Aug 2019 16:52

AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
 
Code:
  if Key = $1D then Key := Ord('#');
funktioniert leider nicht.

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...

HolgerX 31. Aug 2019 17:02

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:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key < 32 then Key := Ord('#');
end;
Dann sollten alle Steuerzeichen als # ausgegeben werden (auch das abschließende #13)


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.

Dr. Jack 31. Aug 2019 17:19

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:
if Key < 32 then Key := Ord('#');
ignoriert er komplett. Auch auf der Tastatur kann ich
enter oder alt etc drücken und er zeigt keine # an. Ist sehr dubios...

Ist ein Honeywell ms7580.

Zitat:

Bis Du dir sichen, das auch wiklich $1D vom Scanner gesendet wird ?
jep. ich habe den Artikel ins Notepad2 gescannt. Da wird das Trennzeichen sichtbar.
Es muss am Edit liegen...

Schokohase 31. Aug 2019 17:43

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 https://docs.microsoft.com/de-de/win...device-support

HolgerX 31. Aug 2019 17:43

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...

Arkar 26. Jun 2022 02:46

AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
 
Zitat:

Zitat von HolgerX (Beitrag 1444146)
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...

Hast du ein bsp dafür ich häng an dem selben Problem, ich versuch per OnKeyPress den Char #29 gegen ↔ zu tauschen funtkioniert damit zwar recht gut.
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 := '&#8596;';
      end;
    end;
  end;
end;

himitsu 26. Jun 2022 12:15

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.
http://www.unicode.org/charts/ > Technical Symbols > Control Pictures (hab das Gefühl die Seite wird immer "hipper" und unübersichtlicher)
https://en.wikipedia.org/wiki/Unicod...ntrol_pictures



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:

Arkar 26. Jun 2022 14:04

AW: FNC1 Trennzeichen auswerten beim Data Matrix Code
 
Zitat:

Zitat von himitsu (Beitrag 1507866)
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.
http://www.unicode.org/charts/ > Technical Symbols > Control Pictures (hab das Gefühl die Seite wird immer "hipper" und unübersichtlicher)
https://en.wikipedia.org/wiki/Unicod...ntrol_pictures



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:

ignorier mal ↔ das ist einfach nurn Zeichen das gegen GS also #29 ersetzt wird ^^ kann auch jedes andere sein. Ich hab schon angefragt ob die nicht einfach mal den Barcode umstellen und das darüber ändern. Kam aber bisher keine antwort. Mein eigener Scanner kein HoneyWell isn billig teil Tera erzeugt das zeichen von selbst ↔ aber auch nur wenn er am Kabel hängt per wifi sendet er das GS unsichtbar.

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.
Seite 1 von 2  1 2      

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