Seite 1 von 1

QR-Code

Verfasst: 22.05.2016 13:19
von Fanpost
Hallo, ich habe (mal wieder) ein Problem. Ich baue mir gerade ein QR-Label Prog mit Druckersteuerzeichen für ein bestehendes Etikettendruck Prog.
Die Erstellung der entsprechenden Label funktioniert einwandfrei, so wie ich es möchte. Nur den QR-Code-Generator, hier aus dem Forum, einzubauen,
dass schaffe ich nicht. Kann mir ein User dabei helfen ? Weitere Erklärungen befinden sich im Code. Danke!!

Erforderliche qrcodelib.lib :

https://storage.googleapis.com/google-c ... -3.1.1.zip

Code-Generator aus dem Forum: http://forums.purebasic.com/german/view ... it=barcode

Code: Alles auswählen

; Labelgenerator mit QR-Code und Drucksteuerzeichen für ein bestehendes Druckprogramm
; Die erzeugten Zeilen befinden sich in "Druck-Etiketten.txt", der QR-Code in "Pic".
; 
; Es werden Zeilen mit oder ohne fortlaufender Nummer (zwei Etikettentypen) erzeugt.
; Das erzeugten Etikettentypen sehen nach der Erstellung der Druckzeile wie folgt aus:
; 
; mit fortlaufender Nummer:
;
;
;                         ABCDEFG
;             Artikel         
;             CABG200001     QR-Code       
;             357098
; 
;
; oder ohne fortlaufender Nummer:
;
;
;                         ABCDEFG
;             Artikel         
;             CABG20         QR-Code       
;             357098
; 
;
; Der erzeugte QR-Code  (noch nicht in Funktion) muss folgendes beinhalten:
;
; Artikel  +  357098 + CABG200001
; bzw.
; Artikel + 357098 + CABG20
;
; Die Daten für den QR-Code befinden sich jeweils in: "codezeile$" und die Codes müssen mit fortlaufender Nummer
; gespeichert werden. Beispiel:  CABG200001.bmp CABG200002.bmp (siehe Druckzeilen)
;
; Artikeleingabe soll auf 13 Zeichen begrenzt sein (noch nicht im Prog)
; CABG200001 = CABG ist das Jahr in Buchstaben;  20 ist die Kalenderwoche; 0001 ist die fortlaufende Nummer
; 357098 ist die Lieferantennummer
; 
;
;
; Erzeugte Druckzeilen mit fortlaufender Nummer:
;
; <g1300#350#600#600#CABG200001.bmp><t520#10#200B#Arial Narrow#ABCDEFG><t100#730#120#arial#357098><t100#325#120#arial#z.B. NP003><t100#525#120#arial#CABG200001>
; <g1300#350#600#600#CABG200002.bmp><t520#10#200B#Arial Narrow#ABCDEFG><t100#730#120#arial#357098><t100#325#120#arial#z.B. NP003><t100#525#120#arial#CABG200002>
;
; ohne Nummer:
;
; <g1300#350#600#600#CABG200001.bmp><t520#10#200B#Arial Narrow#ABCDEFG><t100#730#120#arial#357098><t100#325#120#arial#z.B. NP003><t100#525#120#arial#CABG20>
;
; #druck1, #druck2, #druck3, #druck4, #liefnr werden später aus einer externen Datei geladen.
;
; QR-Generator: http://forums.purebasic.com/german/viewtopic.php?f=8&t=24911&hilit=barcode&sid=91c6d34329c15b8c0ab64d11f9ba3050
;
; 


#verzeichnis = "C:\Code\"    ; muss existieren!
#path_logfile = "C:\Code\Log\"  ; muss existieren!
#logfile      = "Druck-Etiketten.txt"
;#barcodes     = "C:\Code\Pic\" ; für die Barcodes
#druck1 = "<g1300#350#600#600#$$$$$$NNN$$.bmp><t520#10#200B#Arial Narrow#ABCDEFG><t100#730#120#arial#357098>"
#druck2 = "<t100#325#120#arial#$N$NN$N$>"
#druck3 = "<t100#525#120#arial#$$$$$$NNN$$>"
#druck4 = "<t100#525#120#arial#!!!$$$NNN$$>"



UseJPEGImageEncoder()

#Image  = 0
#file   = 0
#liefnr   = "357098"

Enumeration
 #Artikel
 #window
 #windowhilfe 
 #Gadget_text_Nr
 #Gadget_String_Nr
 #Gadget_String_Nr1
 #Gadget_Image
 #Gadget_text_anz
 #Gadget_spin_anz
 #Gadget_Artikel
 #Gadget_Artikel_Nr
 #start_button_mit
 #start_button_ohne
 #SNummer
 #Gadget_text_SNr
 #bcode
 #amazone
 #lfnr
 #Art
 #druckzeilen
 #drz; Druckzeile
EndEnumeration

Global  laufende_nr$,lNummer$,lieferantennummer$
lieferantennummer$   = #liefnr 

CreateImage(0, 200, 200)


Procedure Hauptfenster(datum$,kw); Hauptfenster erstellen
  OpenWindow(#window,500,500,440,500,"Etiketten mit CR39 Barcode", #WS_OVERLAPPEDWINDOW|#PB_Window_ScreenCentered )
  EditorGadget(0, 120, 0, 200, 15)
  ImageGadget (3, 120, 270, 430, 550, ImageID(0), #PB_Image_Border) ;Fenster für QR-Code
  TextGadget(#PB_Any,    10, 70,  80, 30,  "Artikel Eingabe:")
  StringGadget(#Artikel, 120, 70, 85, 19,  "z.B. NP003")
 TextGadget(#PB_Any,250,70,190,20,"Lieferantennummer   = "+lieferantennummer$)
 TextGadget(#PB_Any,250,100,190,20,"Kalenderwoche        = "+kw)
 Datey$ =FormatDate("%yyyy", Date())
 Date$ = FormatDate("%dd.%mm.%yyyy", Date())
 TextGadget(#PB_Any,250,130,190,20,"Jahr "+Datey$+" in Buchstaben   = "+datum$)
 TextGadget(#PB_Any,250,40,190,20,"Heutiges Datum        = "+Date$ )
 TextGadget  (#Gadget_text_SNr    ,10, 100, 100,20,"Erste Seriennummer:")
 StringGadget(#SNummer, 120, 100, 85, 19,  "0001")
 TextGadget  (#Gadget_text_anz   ,10, 40,110,20,"Anzahl der Barcodes:")
 SpinGadget  (#Gadget_spin_anz   ,120 ,40,50,20,10,100,#PB_Spin_Numeric); auf 10 Etiketten eingestellt, normal auf 1
 SetGadgetState(#Gadget_spin_anz,1)
 ButtonGadget(#start_button_mit,10,130,87,20,"Mit S-Nummer")
 ButtonGadget(#start_button_ohne,120,130,87,20,"Ohne S-Nummer")
 ProcedureReturn
EndProcedure



 Procedure generate_anz(datum$,kw) ; Anzahl der Barcodes
   anz= Val(GetGadgetText(#Gadget_spin_anz))
   If CreateFile(#file,#path_logfile+#logfile )
     For i = 1 To anz
    luft$=" "
   Artikel$ = GetGadgetText(#Artikel)
   Nummer$ = GetGadgetText(#SNummer)
   name$ = datum$+kw+Nummer$
   codezeile$ = Artikel$+luft$+lieferantennummer$+luft$+datum$+kw+Nummer$; Code-Zeile für den QR-Code
   stringname$ = name$
   logeintrag1$ = ReplaceString(#druck1,"$$$$$$NNN$$",stringname$)
   logeintrag2$ = ReplaceString(#druck2,"$N$NN$N$",Artikel$)
   logeintrag3$ = ReplaceString(#druck3,"$$$$$$NNN$$",stringname$)
   logeintrag$= logeintrag1$+logeintrag2$+logeintrag3$
   WriteStringN(#file,logeintrag$)
   alterwert$ = Mid(stringname$,7,4)
   zahl     = Val(alterwert$)
   neuezahl = zahl + 1
   neuerwert$ = RSet(Str(neuezahl),4,"0")
   neuereitrag$ = Mid(stringname$,1,6) + neuerwert$ + Mid(stringname$,10,2)
   SetGadgetText(#SNummer,neuerwert$)
   Next
   CloseFile(#file)
   EndIf
 EndProcedure
 
 Procedure ohne(datum$,kw) ; Barcodes mit Seriennummer am Ende der Druckzeile
   anz= Val(GetGadgetText(#Gadget_spin_anz))
   If CreateFile(#file,#path_logfile+#logfile )
   For i = 1 To anz
   luft$=" "   
   Artikel$ = GetGadgetText(#Artikel)
   Nummer$ = GetGadgetText(#SNummer)
   name$ = datum$+kw+Nummer$
   codezeile$ = Artikel$+luft$+lieferantennummer$+luft$+datum$+kw; Code-Zeile für den QR-Code
   jahr$ = datum$+kw
   stringname$ = name$
   logeintrag1$ = ReplaceString(#druck1,"$$$$$$NNN$$",stringname$)
   logeintrag2$ = ReplaceString(#druck2,"$N$NN$N$",Artikel$)
   logeintrag4$ =ReplaceString(#druck4,"!!!$$$NNN$$",jahr$)
   logeintrag$= logeintrag1$+logeintrag2$+logeintrag4$
   WriteStringN(#file,logeintrag$)
   alterwert$ = Mid(Nummer$,1,4)
   zahl     = Val(alterwert$)
   neuezahl = zahl + 1
   neuerwert$ = RSet(Str(neuezahl),4,"0")
   neuereitrag$ = Mid(stringname$,1,6) + neuerwert$ + Mid(stringname$,10,2)
   SetGadgetText(#SNummer,neuerwert$)
   Next
   CloseFile(#file)
   EndIf
  EndProcedure
 

 Procedure.s buchstaben(Jahr); Umwandlung der Jahreszahl in Buchstaben- Ausgabe: datum$=buchstaben(1)
  Dim feiertag.s(10)
  Date$ = FormatDate("%yyyy", Date())
  meindatum$=""                
  For i=1 To Len(Date$)         
  b.a=Asc(Mid(Date$,i,1))+17  
  meindatum$+Chr(b)          
  Next i
  datum$=meindatum$
  feiertag(5)=datum$
  ProcedureReturn feiertag(5)
EndProcedure

Procedure.b GetKW(PJahr.w,PMonat.b,PTag.b) ; Ermittlung der Kalenderwoche - Ausgabe mit: date.l = Date() + kw=GetKW(Year(date),Month(date),Day(date))
   WT4J.b = DayOfWeek(Date(PJahr.w,1,4,0,0,0)) 
    If WT4J.b = 0 : WT4J.b = 7 : EndIf 
   MoKW1.b = 4-WT4J.b 
   WTGD.b = DayOfWeek(Date(PJahr.w,PMonat.b,PTag.b,0,0,0)) 
    If WTGD.b = 0 : WTGD.b = 7 : EndIf 
  MoGD.w = DayOfYear(Date(PJahr.w,PMonat.b,PTag.b,0,0,0))-WTGD.b 
   KW.b = Int((MoGD.w-MoKW1.b)/7)+1 
    If PMonat.b = 12 
      Week1Q.w = DayOfYear(Date(PJahr.w,PMonat.b,PTag.b,0,0,0)) 
      WT4JNY.b = DayOfWeek(Date(PJahr.w+1,1,4,0,0,0)) 
       If WT4JNY.b = 0 : WT4JNY.b = 7 : EndIf 
     LastYDay.w = DayOfYear(Date(PJahr.w,12,31,0,0,0)) 
    If LastYDay.w - Week1Q.w < WT4JNY.b -4 
       KW.b = 1 
    EndIf 
  EndIf 
   If PMonat.b = 1 And PTag.b < 4 
    If WT4J.b < WTGD.b 
      KW.b = GetKW(PJahr.w-1,12,31) 
    EndIf 
  EndIf 
  ProcedureReturn KW.b 
EndProcedure 

date.l = Date()
kw=GetKW(Year(date),Month(date),Day(date))
datum$=buchstaben(1)

; ; ab hier QR-Generator
;
; http://forums.purebasic.com/german/viewtopic.php?f=8&t=24911&hilit=barcode&sid=91c6d34329c15b8c0ab64d11f9ba3050
:
; CompilerIf #PB_Compiler_Unicode = 0
;     CompilerError "compile with UNICODE!"
;   CompilerEndIf
;   
; EnableExplicit
; Define File.s
; Define event.i
; Define ImgID.i
; Structure QRCode
;   Version.l
;   Width.l
;   pSymbolData.l
; EndStructure
; Enumeration
;   #QR_ECLEVEL_L = 0 ; lowest
;   #QR_ECLEVEL_M
;   #QR_ECLEVEL_Q
;   #QR_ECLEVEL_H     ; highest
; EndEnumeration
; 
; 
; UseJPEGImageEncoder()
; 
; ImportC "qrcodelib.lib"
;   QRcode_encodeString8bit(Text.p-utf8, Version.l, QRecLevel.i) As "_QRcode_encodeString8bit"
;   QRcode_free(*Qrcode.QRCode) As "_QRcode_free"
; EndImport
; 
; Procedure CreateQRCode (content.s, ImgID = #PB_Any, EC_Level = #QR_ECLEVEL_L, Size=4 )
;    Protected *Qrcode.QRCode, QRImg, *mem, w, y, x, b
;    *Qrcode = QRcode_encodeString8bit(content, 0, EC_Level)
;    With *Qrcode
;     If *Qrcode = 0 Or \Width = 0
;       ProcedureReturn #Null
;     Else
;       *mem = \pSymbolData
;       w    = \Width
;     EndIf
;   EndWith
;    QRImg  = CreateImage(ImgID, w, w)
;   If QRImg
;     If ImgID = #PB_Any
;       ImgID = QRImg
;     EndIf
;   EndIf
;   If StartDrawing(ImageOutput(ImgID))
;       Box (0, 0, ImageWidth(ImgID), ImageHeight(ImgID), #White) 
;       For y = 0 To w - 1
;         For x = 0 To w - 1
;           b = PeekB(*mem) & $FF
;           If b & 1
;             Plot( x, y, #Black)
;           EndIf
;           *mem + 1
;         Next
;       Next
;      StopDrawing()
;    
;    ;w * Size
;     w * 3.5
;     
;     
;     ResizeImage( ImgID, w, w, #PB_Image_Raw)
;   EndIf
;  
;   QRcode_free(*Qrcode)
;  
;   ProcedureReturn ImgID
; EndProcedure
; 
; ; bis hier der QR-Code



Hauptfenster(datum$,kw);Hauptfenster

Repeat
  Select WindowEvent()
      
  Case 0, 1,2
      If IsImage(ImgID)
      SetGadgetState(3, ImageID(ImgID))
      EndIf    
  Case 3
      Delay(1)
  Case #PB_Event_CloseWindow
      If EventWindow() = #Windowhilfe
      Else
      End
     EndIf
  Case #PB_Event_Gadget 
      Select EventGadget()
      Case #start_button_mit
      generate_anz(datum$,kw)
Case #start_button_ohne
       ohne(datum$,kw)
       EndSelect
  EndSelect
ForEver



; IDE Options = PureBasic 5.42 LTS (Windows - x86)
; CursorPosition = 224
; Folding = -
; Markers = 149
; EnableUnicode
; EnableXP
; Executable = QR-Label.exe

Re: QR-Code

Verfasst: 23.05.2016 17:55
von Hilli
Hallo,
ich habe es mal hiermit ausprobiert und es hat super funktioniert.

; by Dige 10/2011
; http://www.purebasic.fr/english/viewtop ... 12&t=47938
; Create 2D Barcodes (QRCode) based on qrencode-win32
; Requires: qrcodelib.lib, qrcodelib.dll
; http://code.google.com/p/qrencode-win32/downloads/list

Re: QR-Code

Verfasst: 23.05.2016 21:12
von Fanpost
Hilli hat geschrieben:Hallo,
ich habe es mal hiermit ausprobiert und es hat super funktioniert.

; by Dige 10/2011
; http://www.purebasic.fr/english/viewtop ... 12&t=47938
; Create 2D Barcodes (QRCode) based on qrencode-win32
; Requires: qrcodelib.lib, qrcodelib.dll
; http://code.google.com/p/qrencode-win32/downloads/list
Moin, ich muss täglich 20 - 100 Etiketten erstellen und das möchte ich automatisieren. So QR-Codes zu erstellen, entsprechend mit einer laufenden Seriennummer und Inhalt, ist unzumutbar.
Auf den Generator "by Dige 10/2011" habe ich bereits hingewiesen.

Re: QR-Code

Verfasst: 23.05.2016 22:16
von Kiffi
Fanpost hat geschrieben:So QR-Codes zu erstellen, entsprechend mit einer laufenden Seriennummer und Inhalt, ist unzumutbar.

Code: Alles auswählen

ImgID = CreateQRCode(DeineSeriennummer, #Null, EC_Level, Groesse)
... ist unzumutbar?

Re: QR-Code

Verfasst: 24.05.2016 06:18
von Fanpost
Kiffi hat geschrieben:
Fanpost hat geschrieben:So QR-Codes zu erstellen, entsprechend mit einer laufenden Seriennummer und Inhalt, ist unzumutbar.

Code: Alles auswählen

ImgID = CreateQRCode(DeineSeriennummer, #Null, EC_Level, Groesse)
... ist unzumutbar?
Beispiel: mit dem QR-Generator, so wie er ist ohne Änderungen, 100 Etiketten erstellen:

1.) Daten pro QR-Code eingeben mit der entsprechenden fortlaufenden Seriennummer
2.) Einzelne Codes abspeichern mit entsprechender fortlaufender Nummer

Der Zeitaufwand so einzelne Barcodes zu erstellen ist unzumutbar !

Re: QR-Code

Verfasst: 24.05.2016 09:05
von Kiffi
Fanpost hat geschrieben:Der Zeitaufwand so einzelne Barcodes zu erstellen ist unzumutbar !
:lol: das Code-Beispiel von dige ist innerhalb kürzester Zeit so umgeschrieben, dass es Deinen Bedürfnissen entspricht. Wenn Du allerdings einen vorgekauten Code erwartest, musst Du wohl noch weiter suchen...

Re: QR-Code

Verfasst: 24.05.2016 18:01
von Fanpost
Danke an Alle für die ausführliche Hilfe!