Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   QR Code Schreiben - Lesen (https://www.delphipraxis.net/191722-qr-code-schreiben-lesen.html)

juniorA 14. Feb 2017 08:28

QR Code Schreiben - Lesen
 
Geht das?

Ich will in einen Projekt eine begrenzte Anzahl von ASC Zeichen in QR Code wandeln. Dieser Code soll dann auf ein Etikett gedruckt werden, welches auf ein Werkstück geklebt wird. Anschließend soll über ein Scanner der QR Code wieder einlesen und auswertet werden. Hat dort schon jemand Erfahrung und gibt es zum Schreiben und Lesen des QR Code schon fertige Sachen? Muss gestehen ich bin auf diesen recht grün. Mit dem Drucken der Label, dass sollte ich ja noch im Griff bekommen aber bei der Frage wie ich z.B. den Handscanner in mein Programm einbinde, ich an seine Daten rankomme da stehe ich aktuell noch auf dem Schlauch.

Towmuz 14. Feb 2017 08:51

AW: QR Code Schreiben - Lesen
 
Moin,

einfach mal die Sufu benutzen, gibt´s sogar hier im Forum :D tqrbarcode

Wenn du einen Handscanner hast, wirst du dir wohl ein kleines Programm schreiben müssen, das dann auf dem Handscanner läuft und die Daten an dem Ort deiner Wahl einfügt.
Kommt dann auf das OS des Handscanners an, mit welcher Sprache du das Programm schreiben kannst oder ob das über eine RDP Verbindung läuft usw.

Aviator 14. Feb 2017 09:40

AW: QR Code Schreiben - Lesen
 
Du solltest dir für dein Vorhaben mal die Zint Bibliothek anschauen. Die umfasst sehr viele Arten von QR-Codes die du damit sehr schnell und einfach erzeugen lassen kannst.

Die Codes jetzt auszudrucken sollte dann ja das kleinere Problem darstellen.

PS: Das ist das falsche Unterforum.

Union 14. Feb 2017 09:41

AW: QR Code Schreiben - Lesen
 
Für das Drucken gibt es mittlerweile viele, auch kostenfreie, Lösungen. Für das Lesen der Daten ist es am einfachsten, einen HID Scanner zu verwenden. Der wird über USB angeschlossen und simuliert die Eingabe der Daten über die Tastatur.

Mavarik 14. Feb 2017 09:56

AW: QR Code Schreiben - Lesen
 
QRCode erzeugen ist eigentlich kein Problem...

Klar kann man die fertigen Sachen nehmen. Ansonsten ist eine Umstellung der vorhandenen C# Sourcen ein Tag Arbeit.

Lese ist schon aufwendiger... Aber das übernimmt ja i.d.R. Hardware und du bekommst den fertigen Code als Tastatureingabe...

Mavarik

himitsu 14. Feb 2017 11:06

AW: QR Code Schreiben - Lesen
 
Mal an einem Beispiel, auch wenn kein QRCode.

www.imagesinfo.com/products/barcode-reader/
ImagesInfo Barcode Reader Control (BarcodeR.ocx)
* ActiveX TypeLib importiert und BARCODERLib_TLB generiert
* laut Doku die nötigenen Aufrufe in 'ner Testanwendung zusammengeschrieben und bissl getestet (das war der größte Teil, der paartägigen Arbeit, samt Parameteroptimierungen für unsere Bildgrößen und die Scandauer)
* 'ne kleine Komponente/Funktion drumrum, geht aber auch ohne (Image rein > Liste mit Barcodes raus)
Delphi-Quellcode:
// Kapselung/Ansteuerung der Komponenten zum Suchen der Barcodes
procedure ReadBarcode(var Codes: TBarcodeList; Source: TGraphic; Filter: TBarcodeFilter = nil;
  BarTypes: TZBSymbolTypes = []; CheckDigit: Boolean = BarcodeCheckDigit; Density: Integer = BarcodeDensity);

// Kommaseparierte Liste der gefundenen Barcodes
function GetAllBarcodes(const Codes: TBarcodeList): string;
* fertig und nun nur noch ein kleiner Aufruf überall im Programm


Entweder gibt es schon eine fertige Delphi-Komponente, aber ansonsten läuft das grundsätzlich in etwa überall so ab, egal ob ActiveX oder direkt die DLL angesprochen.
Bei ActiveX übersetzt Delphi für einen die API-Aufrufe, was man bei der DLL selber machen müsste, falls es keine Delphi-PAS vom Hersteller oder Anderen gibt.

juniorA 21. Feb 2017 09:59

AW: QR Code Schreiben - Lesen
 
Danke für die Info.
Bin jetzt schon ein ganzes Stück weitergekommen.
Habe jetzt mit Hilfe des Tools Daten als QR Code geschrieben, die dann auf ein Label gedruckt und bekomme sie auch eingelesen. Der Scanne ist über USB angeschlossen und schreibt mir das Ergebnis als Tastureingabe zurück. Aktuell suche ich noch nach einer Möglichkeit mitzubekommen, wann der Scanner eine Information geliefert hat und die Information dann in eine Datei umzuleiten.

himitsu 21. Feb 2017 10:24

AW: QR Code Schreiben - Lesen
 
Ich weiß jetzt nicht, was du für einen Scanner hast.
Die Meisten lassen sich z.B. per COM-Port oder über 'ne DLL ansteuern. Und bei USB wird dafür ein virtueller COM-Port installiert.
Dann muß man die nur noch umstellen, dass sie eben keine Tastatur-Emulation verwenden und bekommt über die Schnittstelle direkt das gewünschte Ergebnis geliefert.

Wir haben Mehrere verschiedene Reader bei Kunden im Einsatz. (aber aktuell nur 2D-Codes)
Da hab ich die TComPort+TComLed-Lib nochmal in ner eigenen Klasse gekapselt, mit Setupdialog, Barcode-Filter, Callbackevent "OnBarcode" usw.
und nach erfolgreicher Verarbeitung im Programm wird noch ein "Beep" an den Reader gesendet, für das Feedback an den Benutzer.
Bzw. bei länderer Verarbeitungsdauer wird der Reader in den Standby versetzt, damit zwischendurch nicht Neues gescannt werden kann.
Und natürlich das An-/Abschalten des Readers und die Steuerung der StatusLED am Reader, beim Betreten/Verlassen der Module im Programm.

juniorA 21. Feb 2017 10:57

AW: QR Code Schreiben - Lesen
 
Danke für das schnelle Feedback,

Bei den Reader handelt es sich um einen NETUM Handheld Made in China.
Die Sache mit den virtuellen COM Port hört sich für mich als Einsteiger gewaltig an, da ich da keine Erfahrung habe. Auf einer anderen Seite fand ich auch ein ganz andere witzige Lösung. Die sah so aus, dass auf das Label am Anfang und Ende eine Kennung gedruckt wird. Wenn am Tasturpuffer die Kennung ankommt wird die ganze Eingabe umgeleitet und mit der Endekennung zurückgestellt. Ist für mich aber auch Neuland und ich müsste mir soetwas erst bauen. Hat da schon jemand ein Beispiel?

himitsu 21. Feb 2017 12:03

AW: QR Code Schreiben - Lesen
 
AssignFile, TFileStream, oder halt MSDN-Library durchsuchenCreateFile auf die Datei 'COM1' und schon hat man Zugriff auf den COM-Port 1.
Dann mit Read und Write kann man Befehle an den Reader senden oder eben den Barcode und Statussignale auslesen. (meistens gefolgt/abschlossen von eimem Zeilenumbruch #13)

Komponenten ala Bei Google suchenTComPort stellen einem da schönere/einfachere/bessere Möglichkeiten bereit.
Vorallem liest der im Hintergrund über einen Thread permanent den Port aus und sagt dir, wenn neue Daten reinkommen.
Und er kapselt die ControllAPIs bezüglich BAUD-Rate usw.
https://msdn.microsoft.com/de-de/lib.../aa363201.aspx

Ohne eigenes Setting werden die Standard-Einstellungen des Windows für diesen COM-Port verwendet.


Den Reader und die Befehle kann man also auch problemlos mit einem Terminal Programm testen.
Bei Google suchencom terminal

juniorA 21. Feb 2017 16:29

AW: QR Code Schreiben - Lesen
 
wie bekomme ich eigentlich mit, auf welcher COM Schnittsteller sich der Barcodescanner eingenistet hat? Der hängt ja an einer der vielen USB Schnittstellen.

HolgerX 21. Feb 2017 18:06

AW: QR Code Schreiben - Lesen
 
Hmm..

Man kann es über die ComPort-Geschichte machen..

Oder nutzt die HID-Möglichkeit..

Hierfür nen Edit auf die Form..
Im OnKeyDown auf #13 prüfen..
und wenn #13 dann Edit.text verwenden und anschließend wieder löschen für den nächsten Barcode..

Somit kann eigentlich jeder USB-Scanner verwendet werden, ob 1D oder 2D..

Fällt dieser aus, kann man den Text (unterhalb des BC mit ausdrucken) aus den Barcode auch von Hand eingeben und mit Enter abschließen.
Somit sogar ein Abfallkonzept vorhanden.

Und alles ohne sich mit der notwendigen Konfiguration (Com-Port, Baudrate, ext.) der verschiedenen Scanner herumschlagen zu müssen.

Ein weiterer Vorteil mit HID ist die Verwendung an ThinClients, wenn die Applikation in einer TherminalSession läuft.
Über die Tastatur-Eingabe gehts sogar damit.
Dann ist meist der ComPort-Scanner außen vor, da es (leider) immer noch ab und an Probleme mit dem Durchrouten in die Session gibt.

juniorA 21. Feb 2017 20:17

AW: QR Code Schreiben - Lesen
 
Solange wie ich ein Editfenster habe ist alles Ok. Da komme ich ja an den Text des Scanners ran.
Ohne Editfenster bekomme ich bei meinen Grundformular das KeyEreignis #13 noch mit aber wo finde ich dann den Text vom Scanner??? Wo wird der gebunkert?

HolgerX 22. Feb 2017 04:30

AW: QR Code Schreiben - Lesen
 
Zitat:

Zitat von juniorA (Beitrag 1362279)
Solange wie ich ein Editfenster habe ist alles Ok. Da komme ich ja an den Text des Scanners ran.
Ohne Editfenster bekomme ich bei meinen Grundformular das KeyEreignis #13 noch mit aber wo finde ich dann den Text vom Scanner??? Wo wird der gebunkert?



'Gebunkert' wird ohne Edit gar nicht..
Das müsstest Du schon selber machen.

Beispiel:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    FBarcodeVal : string;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then begin

    // Verarbeite den Barcode

    // Alten Barcode löschen
    FBarcodeVal := '';
  end else begin
    FBarcodeVal := FBarcodeVal + Key;
  end;
end;

end.


Denke aber an 'KeyPreview' auf true setzen..

juniorA 22. Feb 2017 07:53

AW: QR Code Schreiben - Lesen
 
Danke für die Antwort.
Problem was aber dann besteht ist, wenn der Cursor gerade in einen anderen Editfeld steht, dass dort auch die aktuelle Eingabe vom Scanne auftaucht.
Alle anderen Eingabemöglichkeiten laufend zu sichern um diese dann wieder zu aktualisieren halte ich für nicht so glücklich.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1 : TEdit;
    Edit2 : TEdit;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
  private
     pufferstring : string;
  public
    { Public-Deklarationen }
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  pufferstring := '';
  edit1.Text  := '';
  edit2.Text  := '';
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    // Verarbeite den Barcode
    edit1.Text := pufferstring;
    edit1.Repaint;

    // Alten Barcode löschen
    pufferstring  := '';
  end
  else pufferstring := pufferstring + key;
end;


end.

himitsu 22. Feb 2017 10:41

AW: QR Code Schreiben - Lesen
 
Und jedes Mal, wenn ich die Enter-Taste drücke, springt dieser Code an. :stupid:
Außerdem wird der Text dann irgendwo in der Oberfläche eingefügt, da erst am Ende erkannt wird, dass es "vermutlich" ein Barcode war.

Habe ich vorher in einem Edit was eingegeben oder aus einem anderen Grund eine Taste gedrückt, wann steht das ebenfalls in dem Edit drin.

Also in "allen" Edits/Memos und Co. müsste man den Barcode dann wieder entfernen, wenn er da eigentlich nicht rein sollte, und handelte es sich um ein DB-Control, dann wurde das DataSet auch noch in den EditModus versetzt.
War in dem aktiven Control etwas markiert, dann ist nun die Markierung futsch und das Markierte überschrieben/gelöscht.
War das Control/DataSet schreibgeschützt, hat es womöglich auch schön geknallt.
War eines der Zeichen ein Controlzeichen oder ein Hotkey, wurde eventuell auch gleich irgendwas ausgeführt und/oder der Fokus umgesetzt.
Auch Grids/ComboBoxen/... mit AutoSearch sind danach verstellt, wenn sie grade den Fokus hatten.
Und wer weiß was noch alles passiert.


Sowas kann man nur machen, wenn es "vorher" ein Startzeichen gibt, dann fängt man alle Eingaben ab, bzw. leitet sie um, bis zum Endezeichen.
Oder man muß unbedingt sicherstellen, dass bei Scanbeginn der Fokus sich in den richtigen Controls befindet, bzw. sorgt beim Startzeichen dafür.

HolgerX 22. Feb 2017 17:54

AW: QR Code Schreiben - Lesen
 
Zitat:

Zitat von himitsu (Beitrag 1362317)
Und jedes Mal, wenn ich die Enter-Taste drücke, springt dieser Code an. :stupid:
Außerdem wird der Text dann irgendwo in der Oberfläche eingefügt, da erst am Ende erkannt wird, dass es "vermutlich" ein Barcode war.

Habe ich vorher in einem Edit was eingegeben oder aus einem anderen Grund eine Taste gedrückt, wann steht das ebenfalls in dem Edit drin.

Also in "allen" Edits/Memos und Co. müsste man den Barcode dann wieder entfernen, wenn er da eigentlich nicht rein sollte, und handelte es sich um ein DB-Control, dann wurde das DataSet auch noch in den EditModus versetzt.
War in dem aktiven Control etwas markiert, dann ist nun die Markierung futsch und das Markierte überschrieben/gelöscht.
War das Control/DataSet schreibgeschützt, hat es womöglich auch schön geknallt.
War eines der Zeichen ein Controlzeichen oder ein Hotkey, wurde eventuell auch gleich irgendwas ausgeführt und/oder der Fokus umgesetzt.
Auch Grids/ComboBoxen/... mit AutoSearch sind danach verstellt, wenn sie grade den Fokus hatten.
Und wer weiß was noch alles passiert.



Hmm..


Zitat:

Solange wie ich ein Editfenster habe ist alles Ok. Da komme ich ja an den Text des Scanners ran.
Ohne Editfenster bekomme ich bei meinen Grundformular das KeyEreignis #13 noch mit aber wo finde ich dann den Text vom Scanner??? Wo wird der gebunkert?

Wenn kein EDIT (egal ob TEdit, Grid, DBEdit..) da ist, dann kann da auch nichts in irgend ein Control geschrieben werden !! ;)
Davon bin ich in meinem Beispiel ausgegangen!


Zitat:

// Verarbeite den Barcode
edit1.Text := pufferstring;
edit1.Repaint;

Wenn Du eh ein Edit hast, dann ist das doch wohl überflüssig!
Hier sollte der INHALT des 'pufferstring' geprüft werden, denn da steht ja (eventuell) der Barcode-Wert drinnen, dann brauchste nichts mehr mit dem Edit zu machen.

Bei uns haben Barcodes (wenn von uns erzeugt) ein festes Format. Was im Übrigen auch für GS1 / HIBC und andere 'standardisierte' Barcode(-Inhalte) gilt.

Dass würde dann

Zitat:

Zitat von himitsu (Beitrag 1362317)
Sowas kann man nur machen, wenn es "vorher" ein Startzeichen gibt, dann fängt man alle Eingaben ab, bzw. leitet sie um, bis zum Endezeichen.

entsprechen..

Wenn ein Edit vorhanden, dann gilt:

Zitat:

Zitat von himitsu (Beitrag 1362317)
Oder man muß unbedingt sicherstellen, dass bei Scanbeginn der Fokus sich in den richtigen Controls befindet, bzw. sorgt beim Startzeichen dafür.


Bei uns gibt es spezielle Eingabefelder, welche Farblich hervorgehoben werden, damit der User auch aus Entfernung sehen kann 'Ja ich kann jetzt scannen'. ;)

DP-Maintenance 23. Feb 2017 09:53

Dieses Thema wurde am "23. Feb 2017, 10:53 Uhr" von "Daniel" aus dem Forum "Software-Projekte der Mitglieder" in das Forum "Sonstige Fragen zu Delphi" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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