|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
/* =============================================================
// GENERATORE CODICE QR con libreria QRCoder.dll
//--------------------------------------------------------------
// VARIABILI INSTANCE
nvo_qrgenerator inv_generator
//=== EVENTO 'OPEN' della window w_main ===
// CREA un oggetto nvo
inv_generator = Create nvo_qrgenerator
// e registra un nuovo gestore errori con evento 'assemblyerror'
inv_generator.of_seterrorhandler( this, 'assemblyerror')
// imposta due pulsanti
pb_pulisci.enabled = false
pb_chiudi.enabled = true
//=== EVENTO 'CLICKED' pulsante nominato 'CODIFICA'
// definizioni
string ls_contenuto, ls_larghezza, ls_dir, ls_dir_wb, ls_percorso_qr
integer li_larghezza, li_altezza, li_filenum
boolean lb_dim = FALSE
string ls_base64
blob lblb_qrcode
/* ----------------------------------------------------------------------------------------------------------------------------
Questo pulsante di codifica potrebbe essere utilizzato di continuo per generare tanti codici QR se non si
utilizzasse un file nel quale andare a scrivere il codice: 'qrcode.png' (ciò può essere utile per vari utilizzi)
Poiché qui tale file viene utlizzato in due casi :
1) per far apparire l'immagine del QR in un controllo 'picture' assegnando al controllo il percorso completo del file
2) per emettere il qr dentro a un webBrowser control con la 'navigate' del file stesso
il file resta "collegato" all'applicativo come 'in uso', pertanto dopo ogni generazione, è necessario premere
il pulsante "Pulisci e disconnetti" per liberare il file e poterlo riscrivere alla successiva generazione
-------------------------------------------------------------------------------------------------------------------------------*/
pb_pulisci.enabled = true
pb_chiudi.enabled = false
pb_codifica.enabled = false
//
CoderObject co
//
// percorso e nome del file che conterrà il QR
ls_percorso_qr = "C:\generatore-qr-code\qrcode.png"
//
// Lettura del dato da codificare
ls_contenuto = sle_contenuto.Text
if len(ls_contenuto) = 0 OR isnull (ls_contenuto) then
messagebox ( "Generazione Qr code", "Non è stato immesso alcun contenuto da trasformare in Codice")
sle_contenuto.setfocus()
pb_pulisci.enabled = false
pb_chiudi.enabled = true
pb_codifica.enabled = true
return
end if
//
// lettura delle dimensioni deeisderate del qr
ls_larghezza = sle_larghezza.Text
li_larghezza = integer ( ls_larghezza )
if li_larghezza <700 or li_larghezza > 1600 then
messagebox ("Generatore QR", "Dimensione fuori dai confini ammessi" )
pb_pulisci.enabled = false
pb_chiudi.enabled = true
pb_codifica.enabled = true
return
end if
//
li_altezza = li_larghezza / 1.11
//
// dimensionamento del controllo p_qr
p_qr.visible = FALSE
p_qr.width = li_larghezza
p_qr.Height = li_altezza
//
// generazione e conversione del QR
ls_base64 = inv_generator.of_generateqrcode( ls_contenuto )
//
// L'oggetto CoderObject, nativo, codifica e decodifica i dati blob o string utilizzando i codificatori più diffusi come Hex, Base64, URL
co = create CoderObject
// Codifica un valore BLOB utilizzando il codificatore Base64
lblb_qrcode = co.base64decode( ls_base64 )
destroy co
//
// il QR si trova dunque nella variabile BLOB 'lblb_qrcode'
// - si può emettere nel controllo picture 'p_qr' tramite apposita 'setpicture'
p_qr.setpicture( lblb_qrcode )
p_qr.transparency = 0
p_qr.visible = TRUE
//
// - si può scrivere un file tipo immagine in una cartella su disco...
//
// la cartella deve esistere:
ls_dir = "C:\generatore-qr-code\"
If DirectoryExists ( ls_dir ) then
// cartella esiste quindi si può proseguire
else
// NON esiste, la cartella va creata
CreateDirectory ( ls_dir )
end if
//
// Il nuovo contenuto sovrascriverà il precedente oppure la prima volta verrà scritto un nuovo file
li_filenum = FileOpen( ls_percorso_qr, StreamMode!, Write!, Shared!, Replace!)
FileWriteEx( li_filenum, lblb_qrcode )
FileClose ( li_filenum )
//
// ora il QR viene emesso in altro controllo picture "pb_qr" assegnando il percorso completo del fle immagine
pb_qr.PictureName = ls_percorso_qr
// ora il QR viene emesso nel controllo WB assegnando il percorso completo del fle immagine
ls_dir_wb = "file:///" + ls_percorso_qr
wb_qr.Navigate ( ls_dir_wb )
//
//=== EVENTO 'CLICKED' pulsante nominato 'PULISCI E DISCONNETTI FILE 'QR'
// pulsante da premere prima di generare un nuovo codice QR oppure prima di uscire
pb_chiudi.enabled=true
pb_codifica.enabled=true
//
//=== le seguenti istruzioni interrompono il collegamento col file "qrcode.png" che altrimenti
// resta 'connesso' all'applicativo e quindi non riscrivibile
// viene eliminato il nome del file dal controllo picture
pb_qr.picturename=""
// per ripulire il wb control dal qr codice precedente
string ls_path = "about:blank"
wb_qr.Navigate ( ls_path )
//===
//
//=== inoltre si nasconde anche l'immagine del qr riempito col dato BLOB per omogeneità visiva
p_qr.transparency = 100
//
//=== EVENTO 'CLICKED' pulsante nominato 'CHIUDI'
// Distrugge l'oggetto creato
Destroy inv_generator
//
close(parent)
//----------------------------------------------------------
|