Autore Topic: Barcode  (Letto 1284 volte)

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Barcode
« il: 30 Novembre 2010, 11:50:04 »
Come da oggetto avrei la necessità (se fosse possibile) di generare delle etichette personalizzate, con il relativo BarCode.

Ho visto tra gli esempi il codice scritto da Benoit, Barcode 0.0.3 (arrivato alla release 0.0.5), che lo permette...

Però quando tento di stampare il barcode generato il programma mi restituisce un errore:

Citazione
ERROR: "Not Drawable Object"
in Class Fmain at line 60.

La linea di codice è questa...

Codice: vb [Seleziona]
Draw.Begin(printer)


A questo punto non mi rendo conto se dipenda da g3, perché ho testato su g2 un'applicazione fatta in g2 che ha "dichiaratamente" preso il modulo per generare il barcode da quello di Benoit... e funziona perfettamente. Tant'è che l'ho stampato ed il mio barcode-scan l'ha anche letto egregiamente. E leggendo il codice, è praticamente identico a quello dove invece g3 mi va in errore...


Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Barcode
« Risposta #1 il: 30 Novembre 2010, 12:48:00 »
In Gambas3, Printer è un'oggetto dinamico, a differenza di Gambas2.

Ad ogni modo, prova a vedere con PdfWriter, che ha delle funzioni apposite, ovviamente per documenti pdf...

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Barcode
« Risposta #2 il: 30 Novembre 2010, 13:54:20 »
MD,

quindi è un problema di compatibilità tra g2 e g3...
Scusami, ma io non ho ancora mai fatto nè stampa e molto marginalmente pdfwriter (se non per capire se è possibile fare, e come, dei report, e quindi rimandandolo a quando mi servirà nel prossimo futuro).
Mi potresti dare qualche indicazione più specifica su come stampare questo disegno (barcode) con g3, almeno per iniziare.
Ho provato a creare un'istanza dell'oggetto printer nella suddetta sub...

Codice: [Seleziona]
Dim prn As New Printer

ed ho cambiato la riga incriminata con

Codice: [Seleziona]
Draw.Begin(prn)  

ma mi restituisce il medesimo errore...  ???

[EDIT]
Chiaramente non è quella la strada giusta... allora ho provato un altro tentativo.
Ho creato un'istanza pubblica dell'oggetto Printer, prn.
Al bottone "STAMPA" ho associato l'evento prn.print
Poi ho scritte le seguenti sub:

Codice: vb [Seleziona]
Public Sub prn_Begin()
  prn.Configure
End

Public Sub prn_Draw()
  modCrBcode.PrintBarcode(txtBarcode.Text, Val(txtPosX.text), Val(txtPosY.text), Val(txtHeight.text), Val(txtWidth.text), False) 'questa chiamata genera il barcode...
End

Public Sub prn_End()
  prn.Cancel
End


ma non stampa niente...

PS. Anzi, quando chiudo l'eseguibile la stampante carica un foglio, e lo ricaccia senza stampare nulla.

[/EDIT]


[EDIT_2]
Cercando in giro ho trovato un post proprio di LEO sull'argomento, ed un utente ha consigliato questo codice... Io l'ho adattato al mio nella riga della stampa...
Codice: vb [Seleziona]

 Public Sub Button1_Click()
 Dim rsult As Boolean
  
 prnter.count = 1
 rsult = prnter.Print()
 Print "result:" & rsult  
 End
 '------------------------------------
 Public Sub prnter_begin()
 Print "begin"
 End
 '------------------------------------
 Public Sub prnter_draw()
 Print "draw"
  
 Paint.Begin(prnter)
 modCrBcode.PrintBarcode(txtBarcode.Text, Val(txtPosX.text), Val(txtPosY.text), Val(txtHeight.text), Val(txtWidth.text), False) ' --> qui c'era un Paint.Text("Ciao", 100, 100)
 Paint.End
 End


Ma non va neppure così... La stampante carica il foglio, ma lo ricaccia senza stampare nulla.
« Ultima modifica: 30 Novembre 2010, 15:37:52 da perseo »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Barcode
« Risposta #3 il: 03 Gennaio 2012, 05:39:32 »
Ma non va neppure così... La stampante carica il foglio, ma lo ricaccia senza stampare nulla.

Dopo varie prove  :hard: , e tenendo conto della frase di fsurfing: "...in linea di massima stampare e come disegnare in una drawing area... (http://www.gambas-it.org/smf/index.php?topic=1960.msg21726#msg21726), sono riuscito a stampare con Printer così:

Codice: gambas [Seleziona]

Public Sub Button1_Click()

 With Printer1
   .Configure     ' apre la finestra di dialogo per impostare la stampante
   .Orientation = 0     ' imposta la modalità di stampa "Verticale" (oppure "Orizzontale")
   .Paper = 2     ' imposta il tipo di carta ( 2 = A4)
   .FullPage = True
   .Print        '   <------------  effettua la stampa su foglio !

 '  .OutputFile = "/tmp/miaStampa.pdf"     '  volendo, potrei invece stampare/creare un file .pdf o .ps:
                                                             '  Però sembra che:
                                                             '   - funziona se viene posto prima di .Print;
                                                             '   - ponendolo prima di .Print, quest'ultimo viene escluso, disattivato.
 
 End With

End


Public Sub Printer1_Draw()

 With Paint
   .Font.Size = 20          ' imposto la dimensione del font
   .Rotate(45)          ' ruoto il contenuto, che andrò a stampare, degli oggetti di 45°. Se voglio usare i radianti, sarà: .Rotate(Pi(0.25))
   .Brush = Paint.Color(Color.DarkBlue)   ' imposto il colore del testo a blu scuro. Se voglio usare il codice, sarà in esad. ad esempio: = Paint.Color(&H001F007F); ' in decimale: = Paint.Color(2031743)
   .DrawText("Stampa su foglio", 500, 5000, 4000, 4000, 3)   ' così mi stampa in mezzo al foglio in alto
   .DrawText(TextLabel2.Text, 300, 7000, 4000, 4000, 3)   ' stampo anche il contenuto di una TextLabel !
 End With
 
End
« Ultima modifica: 05 Settembre 2012, 12:31:06 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Barcode
« Risposta #4 il: 16 Gennaio 2012, 22:51:11 »
@ vuott
la parte di codice che hai riportato nel tuo ultimo post:
Codice: [Seleziona]
 With Printer1
   .Configure     ' apre la finestra di dialogo per impostare la stampante
   .Orientation = 0     ' imposta la modalità di stampa "Verticale" (oppure "Orizzontale")
   .Paper = 2     ' imposta il tipo di carta ( 2 = A4)
   .FullPage = True
   .Print        '   <------------  effettua la stampa su foglio !

 '  .OutputFile = "/tmp/miaStampa.pdf"     '  volendo, potrei invece stampare/creare un file .pdf o .ps:
                                                             '  Però sembra che:
                                                             '   - funziona se viene posto prima di .Print;
                                                             '   - ponendolo prima di .Print, quest'ultimo viene escluso, disattivato.
 
 End With
è valida solo per G3? Ho cercato in Gambas Documentation e relativamente a  .Configure   ho ottenuto la risposta
Citazione
This symbol does not exist in version 2.0.

Peraltro, vorrei capire come calcolare il n° di caratteri che posso scrivere in una riga di foglio A4, solo che Draw, essendo un comando grafico, non ha come unità di misura il carattere, ma ...  ??? ... che cosa? E come faccio a capire di quante unita si compone una riga di stampa?
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Barcode
« Risposta #5 il: 17 Gennaio 2012, 16:58:25 »
è valida solo per G3? Ho cercato in Gambas Documentation e relativamente a  .Configure  ho ottenuto la risposta
Citazione
This symbol does not exist in version 2.0.

E' probabile che valga solo per Gambas3. Comunque penso sia un comando opzionale. Infatti anche con Gambas-3, omettendolo, stampa uguale. In fondo è il S.O. a riconoscere la stampante utilizzata.
« Ultima modifica: 17 Gennaio 2012, 18:56:25 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Barcode
« Risposta #6 il: 17 Gennaio 2012, 18:43:28 »
configure vale solo per g3 in g2 è setup


nn puoi sapere quanti caratteri ci stanno in una riga di un foglio a meno che non utilizzi un carattere unicode che per ogni carattere usa sempre lo stesso spazio, in questo caso in base alla larghezza espressa in pixel di ogni carattere sai quanti caratteri ci stanno, tenendo però conto che in una riga di un a4 ci sono tot pixel che dipendono dalla risoluzione, in teoria :

larghezza foglio (in pollici)* risoluzione= larghezza in pixel del foglio.

se non usi caratteri unicode dovrai confrontare la larghezza del testo con la larghezza del foglio

if
draw.textwhidth(riga) >larghezza_pagina then
print "sei fuori riga"
else
print "sei dentro la riga
endif