Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Picavbg - 17 Dicembre 2011, 12:53:23

Titolo: [Risolto] Nuovo Passo --->> La stampa
Inserito da: Picavbg - 17 Dicembre 2011, 12:53:23
Ora che il mio ContabFam ha cominciato a compiere i suoi primi passi, è arrivato il momento di fargli stampare i movimenti giornalieri. Per fare questo, ho cominciato a leggere qualcosa e da quel poco che ho letto, mi pare di avere capito che G3 offra un metodo (Configure) che G2 non aveva. Se è veramente come ho capito, probabilmente, mi converrebbe sin da subito, passare a G3.
Alla suddetta prima perplessità se ne aggiungono però altre:
- devo tracciare una form per l'output di stampa?
- una stampante multifunzione(l'unica che posseggo io)  può essere riconosciuta come una monofunzione?
 ???
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 17 Dicembre 2011, 13:45:28
del riconoscimento della stampante se ne uccupa i  SO tu non te ne devi preoccupare.

se devi stampare una tabella ti allego il codice che uso in gesthotel per stamparle(usabile per gambas2), alla funzione passi direttamente l' oggetto gridview o tableview e la funzione si occupa di stamparla, inoltre puoipassare anche il titolo da dare alla stampa

Codice: [Seleziona]
PUBLIC SUB stampatabella(oggetto AS Object, intestazione AS String, OPTIONAL dimfont AS Integer)
 
  DIM larghezze AS NEW Integer[]
  DIM altezze AS NEW Integer[]
  DIM i, I1, TOTALE, bx, by, fw, fh, b, x, y, j AS Integer
  DIM testo AS String
   DIM temparray AS NEW Integer[]
 
 
  IF dimfont = NULL OR dimfont = 0 THEN
    dimfont = 9
  ENDIF
  bx = 150
  by = 150
  fw = 5000
  fh = 7000
  b = 15
 
  ' 'memorizzazione larghezze celle
  '
  ' FOR i = 0 TO oggetto.Columns.Count - 1
  '     larghezze.Add(oggetto.Columns[i].Width * 6)
  ' NEXT
  '
  ' 'memorizzazione altezze celle
  '
  ' FOR i = 0 TO oggetto.Rows.Count - 1
  '     altezze.Add(oggetto.rows[i].h * 6)
  ' NEXT
  ' IF oggetto.rows.Count > 0 THEN
  '
  ' Printer.Resolution = avvio.risoluzione
   IF Printer.Setup() THEN RETURN
               
                         Draw.Begin(Printer)
                           
                          Draw.Font.Size = dimfont
                        FOR i1 = 0 TO oggetto.Columns.Count - 1
                         temparray.Clear
                         temparray.Add(Draw.TextWidth(oggetto.Columns[i1].title) + 20)
                         FOR i = 0 TO oggetto.rows.count - 1
                             temparray.Add(Draw.TextWidth(oggetto[i, i1].Text) + 20)
                         NEXT
                         temparray.sort(gb.Ascent)
                         larghezze.Add(temparray[temparray.Max])
                        NEXT 
                         'memorizzazione altezze celle
                       
                         FOR i = 0 TO oggetto.Rows.Count - 1
                             altezze.Add(oggetto.rows[i].h * 6)
                         NEXT
                         IF oggetto.rows.Count > 0 THEN
                         WAIT
                         Printer.Resolution = avvio.risoluzione
                         
                         FOR i = 0 TO larghezze.Max
                           totale = larghezze[i] + totale
                         NEXT
                         totale = totale + 300
                         IF totale > Printer.Width THEN
                         
                             Printer.Orientation = 1
                             fh = 5000
                             fw = 7000
                         ELSE
                             Printer.Orientation = 0
                             fh = 7000
                             fw = 5000
                         ENDIF
 
       
                             'disegno bordo pagina
                            ' Draw.Rect(bx, by, fw - bx * 2, fh - by * 2)
                             
                             'disegno intestazione
                             
                             Draw.ForeColor = Color.Black
                             Draw.Font.Size = dimfont * 2
                             x = bx
                             y = by + b
                             Draw.Text(intestazione, x, y, fw, Draw.TextHeight(intestazione), 3)
                             
                             y = y + Draw.TextHeight(intestazione) + b * 3
                             x = bx + b
                             
                             Draw.Font.Size = dimfont
                             
                             'disegnointestazione tabella
                             FOR i = 0 TO larghezze.Max
                                 
                                 Draw.FillColor = 13024767
                                 Draw.FillStyle = 1
                                 Draw.Rect(x, y, larghezze[i], altezze[0] * 2)
                                 Draw.FillStyle = 0
                                     x = x + b
                                     Draw.Text(oggetto.Columns[i].Title, x, y, larghezze[i], altezze[0] * 2, 1)
                                     x = x + larghezze[i] - b
                             NEXT
                             y = y + altezze[0] * 2
                             
                             
                             'disegno celle
                             FOR i = 0 TO altezze.Max
                                 x = bx + b
                                 FOR j = 0 TO larghezze.Max
                                     Draw.Rect(x, y, larghezze[j], altezze[i])
                                     x = x + b
                                     Draw.Text(oggetto[i, j].Text, x, y, larghezze[j], altezze[i], 1)
                                     x = x + larghezze[j] - b
                                 NEXT
                                 y = y + altezze[i]
                                 IF y > fh - by * 2 - altezze[i] THEN ' cambio pagina
                                   Printer.NewPage()
                                   'Draw.Rect(bx, by, fw - bx * 2, fh - by * 2)
                                   y = by + b * 3
                                 ENDIF
                                   
                             NEXT
                             TRY Draw.Font.Size = dimfont - 1
                             testo = "Gesthotel Ver. " & Application.Version & " " & ("Report di stampa") & ",  Powered By fsurfing"
                             Draw.Text(testo, fw - Draw.TextWidth(testo) - bx, fh - Draw.TextHeight(testo) - by)
                             
                             
                         Draw.End
        ELSE
          Message.Info(("la tabella non contiene nessun elemento") & "!", "OK")
        ENDIF
 
END
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 18 Dicembre 2011, 00:10:04
@ fsurfing
Io pensavo di creare un report di stampa che racchiudesse sia il dettaglio movimenti risultante dalla Form02, sia il riepilogo relativo a quadratura e resta di cassa visibile nella form03, come da esempi allegati.
Per fare ciò dalla tua risposta, capisco che devo creare un Form dove dovrei inserire sotto forma di gridview/tableview tutti i dati da stampare; dopo di che posso procedere alla stampa seguendo il tuo codice di esempio.  ;)
Ciò varrebbe sia per  G2 che per G3?
 :ciao: :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 18 Dicembre 2011, 10:41:17
Ciao Picavbg.
Per le mie stampe uso esclusivamente e con soddisfazione PdfWriter di md9327, prova a dare un'occhiata a questo post, ci sono esempi sia per g2 che per g3. Casomai se hai bisogno non hai che da chiedere :2birre:

oops  :D il link http://www.gambas-it.org/smf/index.php?topic=1056.0 (http://www.gambas-it.org/smf/index.php?topic=1056.0)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 21 Dicembre 2011, 15:57:18
@ Golia:
Ti ringrazio moltissimo per il tuo suggerimento, ma come faccio a richiamare pdfwriter internamente al programma che deve stampare?

@fsurfing:
volevo sbirciare sul tuo gesthotel per capire meglio l'utilizzo di certe funzioni che, leggendo il codice, non ho capito:
Es.:
  IF Printer.Setup() THEN RETURN               
  Printer.Resolution = avvio.risoluzione       dove e come é dichiarato l'oggetto Printer ?

Il codice è molto interessante e, non so come lo hai usato nel tuo programma, personalmente, penso che potrebbe costituire una classe dinamica a cui passare i parametri opportuni per costruire di volta in volta l'area di stampa da  riempire coi dati da stampare.
 :ciao:  :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 22 Dicembre 2011, 12:11:54
l ' oggetto printer è proprio di gambas 2
printer.setup fa apparire la finestra di configurazione
della stampante.
Su g3 l'utilizzo e leggermente differente, puoi guardarti gli esempi presenti in g3

in linea di massima stampare e come disegnare in una drawing area
io per semplicità uso quel codiceper stampare delle tabelle, cosi con un unica funzione faccio tutte le stampe.
In alternativa puoi usare pdf writer oppure crearti linea doppo linea la stampa
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 09 Gennaio 2012, 18:29:45
Non so perchè, ma non riesco a compiere il primo approccio con la stampa. Ho realizzato una gridview dove ho ripotrtato tutte le righe da stampare. La mia pagina è dovrebbe rispettare il formato A5 e le righe impegnate nella gridview di stampa potrebbero superare la capacità di una pagina A5.
Non avendo alcuna dimestichezza, ho dato una sbirciatina al Wiki. --> "Guida ai report" per l'utilizzo di PdfWriter. Mi sembra di capire che l'utilizzo di PdfWriter, non comporta la preimpostazione di una Gridview o di una Tableview; infatti l'anteprima può essere fornita dall stesso PdfWriter. Perciò, sia per l'impaginazione automatica delle righe di stampa, sia per la non necessaria preimpostazione di una pagina dentro un'oggetto come  Gridview o Tableview, potrebbe essere assai pratico orientarmi su PdfWriter. Ho trovato il file corrispondente nell'area di Download, ma detta versione è valida per G3, G2 o entrambe? Ancora, PdfWriter permette di stampare nel formato A5?  ???
Ciao
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 09 Gennaio 2012, 22:59:20
Citazione
ma detta versione è valida per G3, G2 o entrambe
Mi sembra che non vada bene per g3, per G3 prova questo http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1964.0;attach=1869 (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1964.0;attach=1869), trovi anche vari esempi fatti da md, dex e io.
Qualche dritta, anche per chi non ha guardato il wiki come te  ;)
Per usare Pdfwriter devi abilitare i componenti gb.pdf e gb.compress.
Pdfwriter non manda direttamente dati in stampa, crea un file PDF, quindi sarà facile mandare il file in stampa o creare una visualisazione per fare un'anteprima. Nell'esempio del link c'è un form che fa da anteprima e invia il file alla stampante, puoi benissimo usarlo, l'ho fatto anch'io  :).
Per portare Pdfwriter nel tuo progetto devi copiarti le classi PdfWriter e PdfWriterFont, le "sottoclassi" di pdfwriter che vedi nell'esempio sono praticamente report, una per ogni report. Quindi per ogni tuo report dovrai crearti una classe simile, basta che ne copi una e poi l'adatti alle tue esigenze. Nella sottoclasse ci sono 3 importanti function, Header() Data() e Footer(), rispettivamente: Intestazione, corpo e piè di pagina.
Comunque guardati l'esempio, una volta capito è davvero facile creare i report.
Dimenticavo:
Citazione
PdfWriter permette di stampare nel formato A5?
Si, in tutti i formati, adirittura (lo trovi in un'altra discussione) puoi mettere mano alla classe e crearti un formato personalizzato, naturalmente, verticale e orrizontale.
Ciao

Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 10 Gennaio 2012, 00:05:11
Citazione
ma detta versione è valida per G3, G2 o entrambe
Mi sembra che non vada bene per g3, per G3 prova  questo (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1964.0;attach=1869), trovi anche vari esempi fatti da md, dex e io.
Ho capito: ho risposto troppo presto; avrei dovuto leggere piu a fondo il wiki  :-[ , però devo anche dirti che utilizzo ancora oggi G2.  Comunque non ho ancora deciso se impiegare nel mio programma PdfWriter.
 :ciao: :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 10 Gennaio 2012, 11:34:06
Ok, se hai bisogno son quà, ciao  :ciao:  :2birre:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 10 Gennaio 2012, 16:45:16
PdfWriter o printer? E' un bel problema. Ho riletto la guida al PdfWriter del wiki, ma non ho trovato alcun riferimento  circa la sua esclusiva compatibilità con G2. Dovendo gestire un documento di stampa nell'ambiaente G2, mi pare di capire, che è indifferente utilizzare l'una o l'altra funzione, ma in ambiente G3, visto che PdfWriter è nato sotto G2, potrebbe non funzionare, perciò sembrerebbe più pratico l'uso di printer. Con esso infatti l'evoluzione verso G3 sarebbe meno dolorosa. Detto questo, è chiaro che sarei orientato ad utilizzare la funzione printer.
Dall'esempio fornitomi gentilmente da dfsurfing, noto che per la stampa viene richiamata una classe (stampatabella) alla quale vengonono passati alcuni parametri ed esattamente:
Codice: [Seleziona]
PUBLIC SUB stampatabella(oggetto AS Object, intestazione AS String, OPTIONAL dimfont AS Integer)
dove:
-  oggetto dovrebbe essere, nel mio caso, la gridview, contenente le righe di stampa
- intestazione è la stringa contenente la testata del documento
- dimfont dovrebbe contenere il valore corrispondente alla dimensione del carattere di stampa.

Se printer.setup come dice fsurfing,  fa apparire la finestra di configurazione della stampante, il dmfont non dovrebbe essere necessario, altrimenti, mancano,
secondo la mia modestissima logica altri parametri, come la dimensione del formato carta (A4, A5, ...), il set-caratteri da stampare (Arial, Monospace, Nimbus Roman, ...), nonchè lo stile di stampa(Normal, Italic, Bold, Bold-Italic). Vedo poi che le coordinate di iniziio stampa sono stabilite dalla classe di stampa, come pure il n° massimo di righe da stampare in ciascuna pagina.
Ahiahi, comincia a girarmi la testa  :rolleyes:
 :ciao: :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 10 Gennaio 2012, 18:05:35
forse non ci siamo capiti.

con print non è che devi per forza crearti una tabella per stampare, io ti ho solo fornito un pezzo di codice che io utilizzo per stampare l etabelle, visto che nel mio programma utilizzo moltissime viste a tabella e un codice del genere mi permette di stanparle tutte con un unica funzione.

logicamente printer.setup fa apparire la pagina di setup della stampante , percui ogni altro settaggio inserito dopo è un sovrappiù messo da me per i miei fini , e quindi non necessario.

se devi stampare altre cose questo codice non ti sarà utile e dovrai costruirti a manina la stampa.

con pdfwriter teoricamente il lavoro potrebbe essere più semplice (io ad esempio trovo più semplice usare printer perchè mi sono abituato così:) ) o più difficile.

anche con printer il passo a g3 potrebbe essere non del tutto indolore.

come vedi dall' esempio in g2 si stampa direttamente come e quando vuoi con draw.begin e draw.end
in g3 invece devi inizializzare la stampante , far apparire il form di setup e poi il codice di stampa è all' interno della funzione nome_oggetto_printer_draw()
inoltre non usi + draw.begin ecc ecc ma si usa paint.text ecc ecc .
forse può anche essere che il metodo draw funzioni anche in g3 ma non ho ancora trovato.
se guardi nella sezione di g3 qualche giorno fa ho postato un esempio di stampa in g3 con printer
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 10 Gennaio 2012, 18:33:18
Citazione
PdfWriter o printer? E' un bel problema. Ho riletto la guida al PdfWriter del wiki, ma non ho trovato alcun riferimento  circa la sua esclusiva compatibilità con G2. Dovendo gestire un documento di stampa nell'ambiaente G2, mi pare di capire, che è indifferente utilizzare l'una o l'altra funzione, ma in ambiente G3, visto che PdfWriter è nato sotto G2, potrebbe non funzionare, perciò sembrerebbe più pratico l'uso di printer. Con esso infatti l'evoluzione verso G3 sarebbe meno dolorosa.
PdfWriter per G2 lo trovi in questa discussione http://www.gambas-it.org/smf/index.php?topic=1056.0 (http://www.gambas-it.org/smf/index.php?topic=1056.0)
PdfWriter è una classe, avrebbe dovuto funzionare sia per G2 che per G3, ma evidentemente Bennoit ha cambiato qualcosa  :).
Per portare i report da G2 a G3 o viceversa non ci sono problemi, basta sostituire SOLO la classe PdfWriter, già collaudato  ;) con il mio programma, per la conversione ho sostituito solo quel file.
Citazione
con pdfwriter teoricamente il lavoro potrebbe essere più semplice (io ad esempio trovo più semplice usare printer perchè mi sono abituato così:) ) o più difficile.
E' giusto quello che dice fsurfing, vedi te quello che va più incontro alle tue esigenze o al tuo sistema di programmare, entrambi (almeno credo  :-[) possono soddisfare i report più esigenti.
Ciao
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 12 Gennaio 2012, 18:52:50
Premesso che lo strumento scelto per ora è printer, In effetti, devo dire che non ho chiaro come avviare la stampa. Per comodità ho creato una sorta di anteprima costruendo una gridview dove ho valorizzato tutte le righe necessarie per la stampa finale. Ora dovrei prelevare ciascuna riga ed, al suo interno, ciascuna cella.
Ho seguito, per capire, il codice-esempio di fsurfing ed ho cercato di realizzare qualcosa che gli somigli; tuttavia, il primo approccio è sempre quello più difficile, per cui ho incontrato subito le inevitabili difficoltà. Per avviare la  stampa richiamo una la classe Report1 alla quale vorrei passare l'oggetto GridStamp, cioè la mia gridview piena di tutte le informazioni da stampare, però non ne sono stato capace:
Codice: [Seleziona]
PUBLIC SUB PulSTampaClk_Mio()
DIM DocuMovvGG AS Report1
'---------------------------------
  DocuMovvGG = NEW Report1(GridStamp.Object)
END
Ottengo il seguente errore:
Citazione
Unknown symbol 'Object' in class 'Gridview'
.
 ???
Posso passare tutta la gridview o devo valorizzare una tabella specifica coi dati presenti nella gridview?
 :(
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 12 Gennaio 2012, 19:10:36
devi passare tutto l' oggetto, overo gridstamp,non gridstamp.object

poi inizi a scorrere con un ciclo la tabella cella per cella e la ricostruisci nel metodo draw
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 13 Gennaio 2012, 15:53:37
devi passare tutto l' oggetto, overo gridstamp,non gridstamp.object
poi inizi a scorrere con un ciclo la tabella cella per cella e la ricostruisci nel metodo draw

Ho capito, grazie.
Eseguita la correzione, ho proceduto col tentare la stampa della mia gridview. Il programma è andato avanti senza segnalazioni di errori; la classe richiamata per la stampa svolge apparentemente il suo compito, ma  ... :o... la stampa non viene prodotta.
Certamewnte il codice che ho buttato giù ha bisogno di essere rifinito, ma non pensavo che lo fosse fino al punto di non fare richiamare nemmeno il foglio di carta alla stampante.
Riporto qui di seguito il codice scritto che, come potrai constatare è monco di qualche istruzione che leggendo il tuo esempio, non ho capito:
Codice: gambas [Seleziona]

PUBLIC SUB _new(Docum AS Object)
DIM bSwfine AS Boolean

DIM i AS Integer
DIM x AS Integer
DIM y AS Integer
DIM iCol AS Integer
DIM iLarghStmp AS Integer = 5000
DIM iAltStmp AS Integer = 5000
DIM iIntLn AS Integer = 15      ' ampiezza interlinea
DIM iRg AS Integer
DIM iTotRgDocum AS Integer

DIM $Testata AS String

DIM ilarghCol AS NEW Integer[]
DIM iAltRiga AS NEW Integer[]

iTotRgDocum = 0
 WHILE bSwfine = FALSE
  IF Docum[iTotRgDocum, 1].Text = ""
    IF Docum[iTotRgDocum, 2].Text = ""
      IF Docum[iTotRgDocum, 3].Text = ""
        IF Docum[iTotRgDocum, 4].Text = "" THEN
            bSwfine = TRUE
        ENDIF
      ENDIF
    ENDIF
  ENDIF
  INC iTotRgDocum
 WEND
 iTotRgDocum -= 1
  IF Printer.Setup() THEN RETURN      '  permette l'apertura della finestra di dialogo per la scelta dei parametri di stampa
  Draw.Begin(PRINTER)   
  '----------------- Memorizzazione ampiezza celle -------------------------------------------------
  ilarghCol.add(Draw.TextWidth(Docum.Columns[0].title))
  ilarghCol.add(Draw.TextWidth(Docum.Columns[1].Text))
  ilarghCol.add(Draw.TextWidth(Docum.Columns[2].title))
  ilarghCol.add(Draw.TextWidth(Docum.Columns[3].title))
  ilarghCol.add(Draw.TextWidth(Docum.Columns[4].title))
'----------------------------------------------------------------------------------------------------
  FOR i = 0 TO iTotRgDocum
    iAltRiga.Add(Docum.rows[i].h * 6)
  NEXT
'----------------------- Intestazione ---------------------------------------------------------------------------------
  Draw.ForeColor = Color.Black
  Draw.Font.Size = 12
  x = 150
  y = 150
  Draw.Text($Testata, x, y, iLarghStmp, Draw.TextHeight($Testata), 3)
  y = y + Draw.TextHeight($Testata) + iIntLn * 2      'avanzamento carta di 2 interlinee
  x = 150
  FOR iCol = 0 TO 4
    Draw.Text((Docum.Columns[iCol].title), x, y, ilarghCol[iCol], iAltRiga[iRg])
    x = x + ilarghCol[iCol]
  NEXT
'-------------------------------------------------------------------------------------------------------------------------
'----------------------- Riga di dettaglio --------------------------------------------------------------------------------- 
  x = 150
  FOR iRg = 0 TO iTotRgDocum
    FOR iCol = 0 TO 4
      Draw.Text((Docum[iRg, iCol].Text), x, y, ilarghCol[iCol], iAltRiga[iRg])
      x = x + ilarghCol[iCol]
    NEXT
    x = 150
  NEXT
'-------------------------------------------------------------------------------------------------------------------------
END

Ho guardato anche i componenti del mio ambiente Gamas, ma non credo di doverne attivare altri. Chiedo scusa se approfitto della tua paziente disponibilità, ma perchè la stampa non si avvia?  ???
Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 13 Gennaio 2012, 16:10:38
la stampa non ti esce perchè hai dim enticato di mettere un draw.end alla fine della stampa.


probabilmente le linee ch enon hai capito sono quelle che si occupano prima di leggere tutta la tabella per capire se la stampa deve essere effettuata con il foglio in verticale o in orrizzontale .

il mio programma infatti analizza cella per cella il testo di conseguenza in base al numero di caratteri definisce la dimensione finale della tabella da stampare , se questa supera la dimensione di un a4 verticale si occupa di girare il foglio, se invece la dimensione verticale della stampa supera un foglio si occupa di suddividerla in + pagine
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 14 Gennaio 2012, 16:31:03
Grazie per avermi acceso la lampadina. effettivamente non mi ero accorto dell'istruzione DRAW.END. Ora la stampante si muove e qualcosina la produce.
Per ora sto cercando di capire alcuni parametri contenuti nelle varie righe di stampa. Prima di occuparmi delle righe di dettaglio, sto cercando di fare funzionare la stampa della testata del documento:
Codice: gambas [Seleziona]

  Draw.ForeColor = Color.Black
  Draw.Font.Size = 8
  x = 100
  y = 100
  Draw.Text($Testata, x, y, iLarghStmp, Draw.TextHeight($Testata), 3)

Vorrei però impostare la risoluzione di tipo bozza, ma non sono riuscito a trovare il parametro da attribuire al comando Printer.Resolution.
Premesso poi che ho selezionato la stampa su fogli A5, vorrei stampare la testata del documento al centro, ho scoperto che l'ultimo parametro della "Draw.Text", impostato a '3' dovrebbe fare al caso mio, ma  non produce l'effetto desiderato. Dipende probabilmente dalla larghezza della riga da stampare?
Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 14 Gennaio 2012, 18:20:45
printer risolution serve per settare la risoluzione di stampa espressa in dpi , variando questo valore varierà anche la grandezza di ciò che stampi se stampi un rettangolo di 100 x 200 sulla stampa la sua dimensione reale dipenderà dalla risoluzione che usi. quindi ogni valorizzazione devi fare in modo che sia proporzionale alla risoluzione .

se stampi in a5 le dimensioni del foglio cambia riaspetto ai valori che avevo messo io , e naturalment evaria anche in base alla risoluzione.

ad esempio un a4 stampato a 300 dpi avrà circa 16000 punti di larghezza, a 90 dpi ne avrà solamente 4800

naturalmente credo sia corretto usare la risoluzione per definire la qualità di stampa , ma occhio che cambiandola cambia tutta la dimensione della stampa

la proprietà allineamento del testo funziona bene però devi tener presente che si alline in relazione al rettangolo formato dalla larghezza e altezza che inserisci nei due paremetri
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 14 Gennaio 2012, 22:43:08
printer risolution serve per settare la risoluzione di stampa espressa in dpi , variando questo valore varierà anche la grandezza di ciò che stampi se stampi un rettangolo di 100 x 200 sulla stampa la sua dimensione reale dipenderà dalla risoluzione che usi. quindi ogni valorizzazione devi fare in modo che sia proporzionale alla risoluzione .
se stampi in a5 le dimensioni del foglio cambia riaspetto ai valori che avevo messo io , e naturalment evaria anche in base alla risoluzione.
ad esempio un a4 stampato a 300 dpi avrà circa 16000 punti di larghezza, a 90 dpi ne avrà solamente 4800
naturalmente credo sia corretto usare la risoluzione per definire la qualità di stampa , ma occhio che cambiandola cambia tutta la dimensione della stampa
la proprietà allineamento del testo funziona bene però devi tener presente che si alline in relazione al rettangolo formato dalla larghezza e altezza che inserisci nei due paremetri
Mi dispiace darti tanto da fare per spiegarmi la strutturazione di una stampa, ma ancora non riesco a capirne il meccanismo. Pensavo che non fosse assolutamente necessario creare per ciascuna riga di stampa un rettangolo dentro il quale inserire la stringa da stampare, invece, a quanto pare mi sono sbagliato.
 :-[
Pensavo pure che nella finestra di dialogo che si avvia, preliminarmente alla stampa, potessi predisporre la modalità bozza,normale, alta qualità, invece non ho trovato niente del genere. Allora, come posso richiedere la modalità bozza?
 :(
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 15 Gennaio 2012, 11:25:58
non mi sono spiegato bene,

non è che devi creare un rettangolo per scriver eun testo, ma se usi l' allineamento devi tenere conto del fatto che la scritta sarà allineata al rettangolo "virtuale" che inizia in x ,y con larghetta w w altezza h.

draw.text(testo,x,y,w,h,align)

naturalmente poi puoi anche non utilizzare l' allineamento per cui sarà:

draw.text(testo,x,y)
il testo inizierà alle coordinate x,y


in g2 non puoi dal form di setup definire la qualità di stampa, mi sembra però superflua questa funzione nella stampa di report

se invece vuoi implementarla dai la possibilità di scegliere tre o più valori di risoluzione



Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 16 Gennaio 2012, 12:54:48
non mi sono spiegato bene,

non è che devi creare un rettangolo per scriver eun testo, ma se usi l' allineamento devi tenere conto del fatto che la scritta sarà allineata al rettangolo "virtuale" che inizia in x ,y con larghetta w w altezza h.
draw.text(testo,x,y,w,h,align)
naturalmente poi puoi anche non utilizzare l' allineamento per cui sarà:
draw.text(testo,x,y)
il testo inizierà alle coordinate x,y

in g2 non puoi dal form di setup definire la qualità di stampa, mi sembra però superflua questa funzione nella stampa di report
se invece vuoi implementarla dai la possibilità di scegliere tre o più valori di risoluzione
Quindi, se ho capito, non ho bisogno di utilizzare istruzioni come Draw.Rect.

Per la risoluzione, non so come potrei implementarne la funzione.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 17 Gennaio 2012, 18:52:30
nmo draw.rect non ti serve, a meno che naturalmente tu non voglia ottenere un testo circondato da un rettangolo :)

se stampi solo testo non vedo nessuna necessita di porsi il problema , imposta una risoluzione adeguata, che so tipo 150 e vai felice di conseguenza.

come nel mio esempio usa delle variabili per definire in pixel la larghezza del foglio , l' altezza, il bordo,la dimensione  del font, la spaziatura  ecc così potrai in caso di bisogno cambiare la risoluzione e cambiando i valori delle varie variabili in funzione della risoluzioone ottenere sempre una stampa ottimale

ps: si sta sempre parlando di g2, per g3 si possono fare in modo diverso (vedi esempi di stampa di g3)

Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 17 Gennaio 2012, 19:22:04
per capire meglio ho buttato giù un programmino che esegue solamente, per ora, una riga di stampa, l'intestazione di un documento:
Codice: [Seleziona]
PUBLIC SUB _new()
DIM iDimCrt AS Integer
DIM iDPI AS Integer     ' DPI(dots per inch) = punti per pollice
DIM x AS Integer
DIM y AS Integer

DIM $Testata AS String

IF Printer.Setup() THEN RETURN      '  permette l'apertura della finestra di dialogo per la scelta dei parametri di stampa
  Draw.Begin(PRINTER)   
  iDPI = Draw.W
  SELECT CASE iDPI
          CASE 4958     'Formato Pagina = A4
            iDimCrt = 12
          CASE 3500     'Formato Pagina = A5
            iDimCrt = 8
  END SELECT
  x = 80
  y = 80
  $Testata = "@****** Questo titolo è una testata di documento ******@"
  Draw.Font.Size = iDimCrt
  Draw.Text($Testata, x, y, iDPI, 80, 3)
  Draw.End
END   

La stampa si posiziona splendidamente al centro della riga, in testa al foglio, sia esso A4 che A5, la cui larghezza è data dalla DRAW.W. Finalmente comincio a capirci qualcosiana. Ho notato però, sia nel codice contenuto nel tuo esempio, sia in qualche altro che si fa usa del comando DRAW.Rect(...). Non ne ho ancora capito l'utilità. Potresti ilklumuinarmi in proposito. Grazie!
Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 17 Gennaio 2012, 19:38:12
secondo me è meglio così.


Codice: [Seleziona]
PUBLIC SUB _new()
DIM iDimCrt AS Integer
DIM iDPI AS Integer     ' DPI(dots per inch) = punti per pollice
dim Wt as integer
DIM x AS Integer
DIM y AS Integer

DIM $Testata AS String

IF Printer.Setup() THEN RETURN      '  permette l'apertura della finestra di dialogo per la scelta dei parametri di stampa
  Draw.Begin(PRINTER)  
  wt = Draw.W
  SELECT CASE printer.size
          CASE "A4"     'Formato Pagina = A4
            iDimCrt = 12
          CASE "A5"     'Formato Pagina = A5
            iDimCrt = 8
  END SELECT
  x = 80
  y = 80
  $Testata = "@****** Questo titolo è una testata di documento ******@"
  Draw.Font.Size = iDimCrt
  Draw.Text($Testata, x, y, wt, 80, 3)
  Draw.End
END  


draw.rec serve per disegnare un rettangolo, quindi si usa quando si vuole disegnare un rettangolo
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 23 Gennaio 2012, 19:19:18
draw.rec serve per disegnare un rettangolo, quindi si usa quando si vuole disegnare un rettangolo

Ho capito!  :D Comunque, oggi ho potuto intensificare le prove e sono riuscito ad ottenere risultati positivi, segno che sto familiarizzando.  ;)
Non mi riesce però la stampa con allineamento justify, infatti
Codice: [Seleziona]
 Draw.Text($TabTesto[i], x, y, iLarghTst, ihCrt, 4)    ' 4 --> Allineamenmto "justify"
funziona tale e quale l'allineamento con codice "1"(a sx). Cosa mi consigli per raggiungere l'obiettivo?
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 23 Gennaio 2012, 21:28:04
non saprei proprio come aiutarti  :(
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: vuott - 24 Gennaio 2012, 00:29:09
Non mi riesce però la stampa con allineamento justify, infatti
funziona tale e quale l'allineamento con codice "1"(a sx). Cosa mi consigli per raggiungere l'obiettivo?
 :ciao:

Hai provato con .RichText ?
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 24 Gennaio 2012, 12:03:07
Hai provato con .RichText ?
Cobn .RichText la stampa non è più leggibile; infatti una riga di stampa viene segmentata ed alla fine della stampa tali segmenti risultano sovrapposti, come se fossero stmapati sempre sulla stesasa colonna. Probabilmente ciò dipende dal fatto che il la funzione RichText si traduce in Gambas in una stringa che usa un sottoinsieme del formato HTML che ha una sua propria gestione di scrittura carattere, per mezzo di marcatori suoi propri, vedi qui (http://gambasdoc.org/help/comp/gb.qt/draw/richtext?it) e  qui (http://gambasdoc.org/help/def/richtext?it).
Può darsi che il problema si verifichi in G2 e non in G3. É così?
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: vuott - 24 Gennaio 2012, 13:25:34

Cobn .RichText la stampa non è più leggibile;
Può darsi che il problema si verifichi in G2 e non in G3. É così?
 :ciao:

 :ciao:
Allora... rettifico, dovresti provare ad utilizzare:  .DrawRichText

Io ho provato con Printer questa istruzione (con testo previsto abbastanza lungo):
Codice: [Seleziona]
Paint.DrawRichText("Si potrebbe andare tutti quanti allo zoo comunale. Vengo anch'io. No, tu no ! Per vedere come stanno le bestie feroci...", 200, 100, 300, 100, 4)

Al posto del valore numerico puoi utilizzare anche align.justify :
Codice: [Seleziona]
Paint.DrawRichText("Si potrebbe andare tutti quanti allo zoo comunale. Vengo anch'io. No, tu no ! Per vedere come stanno le bestie feroci...", 200, 100, 300, 100, align.justify)

(In entrambi i casi è necessario inserire la proprietà della risoluzione: Printer1.Resolution = ......; nonché dopo Paint.DrawRichText(".....") bisogna inserire l'istruzione: Paint.Stroke )

ed il risultato è stato coerente con formattazione giustificata del testo.

Preciso che ho Gambas- 3.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 04 Febbraio 2012, 23:38:32
@ fsurfing:

Ho ripreso oggi, dopo qualche giorno di pausa forzata, la prova di stampa di una gridview, ma non riesco ad andare avanti. Si capisco benissimo che avrei pouto copiare il tuo codice pari pari per ottenere la stampain manioera semplice ed immediata; ma cosa avrei capito. Allo stato attuale non m'importa di arrivare alla stampa del mio documento subito o fra un anno  ;D , m'interessa piuttosto capire il procedimentp per adattare le funzioni di stampa, con le loro opziooni, al tipo di documento che vorrei ottenere.
Dovendo stampare anch'io una gridview precompilata, ho capito di dovere stampare sia rettangoli che testo e, naturalmente, ho incontrato le prime difficoltà. Nella documentazione di Gambas ho trovato  questo (http://gambasdoc.org/help/comp/gb.qt/font?it) esempio ed, analogamente, ho scrittoDraw.Font =
Codice: [Seleziona]
Font["Bitstream, iDimCrt, bold"]
Draw.Text($Testata, x, y, iLarghRg, ihCrt, 3)
, ma  :specchio: ,ahimè, non ha funzionato; infatti la stampa prodotta mantiene sempre lo stesso stile.
Ma dove, dove sbaglio?  ??? :rolleyes:
Ciao.

Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 05 Febbraio 2012, 09:26:17
mi viene in mente solo un paio di cose:


il font che vuoi usare deve essere presente nel tuo sisitema
il codice per usarlo deve essere scritto dopo il draw.begin


io solitamente utilizzo:

Codice: [Seleziona]
draw.font.name="arial"
draw.font.size=20
ecc ecc


in teoria usando la tua espressione:

Codice: [Seleziona]
draw.Font = Font["Arial, 12, bold"]
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 08 Febbraio 2012, 11:18:01
il font che vuoi usare deve essere presente nel tuo sisitema
Cosa intendi per presente nel sistema?

Ti riferisci all'ambiente Gambas o proprio a file 'set caratteri' true type o altro, interni ad una directory come, per es. /usr/bin? Il set di caratteri che uso normalmente è il Bitstream Charter che è presente nell'ide di Gambas (vedi proprietà form o altri oggetti grafici).

Tu dici anche:
Citazione
il codice per usarlo deve essere scritto dopo il draw.begin
io solitamente utilizzo:
draw.font.name="arial"
draw.font.size=20
Ed io infatti ho copiato  ;D
Codice: [Seleziona]
Draw.Begin(PRINTER)  
  Draw.Font = Font["Bitstream Charter"]
mentre per il font size, aspetto prima di sapere il formato carta scelto dall'utente nella finestra di dialogo Imposta stampante
Codice: [Seleziona]
SELECT CASE printer.size
          CASE "A4"     'Formato Pagina = A4 (--> 4958 dpi)
            iDimSetCrt = 12
            iHRgSt = 100     'Altezza riga
            iPosYMax = 6800    'Altezza pagina --> 7017 dpi
          CASE "A5"     'Formato Pagina = A5  (3500 dpi)
            iDimSetCrt = 8
            iHRgSt = 70      'Altezza riga
            iPosYMax = 4700    'Altezza pagina --> 4958 dpi
  END SELECT

Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 08 Febbraio 2012, 12:46:02
Evviva, piccolo progresso!  ;D
Ho utilizzato il seguente codice per la definizione del Font:
 
Codice: [Seleziona]
 Draw.Font.Name = "Bitstream Charter"
  Draw.Font.Bold = TRUE
  Draw.Font.Italic = FALSE
  Draw.Font.Size = iDimSetCrt
e, finalmente, ha funzionato. Ora devo cercare di disegnare i rettangoli per riprodurre in stampa il formato griglia.
Ti faccio sapere.
 :ciao:  :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 08 Febbraio 2012, 17:54:03
ottimo :)

per disegnare i rettangoli non dovresti avere problemi tanto più che x, y ,w e h sono le stesse del testo
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 08 Febbraio 2012, 21:54:47
per disegnare i rettangoli non dovresti avere problemi tanto più che x, y ,w e h sono le stesse del testo
Eppure oggi ho impiegato quasii tutto il pomeriggio per cercare di stampare il testo dentro il proprio rettangolo e non ci sono riuscito; il testo viene stampato sempre a cavallo della lienea di base del rettangolo. Purtroppo non riesco a capire dove sbaglio e, di conseguenza, come coprreggere l'errore.
 :(
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 08 Febbraio 2012, 22:58:02
Codice: [Seleziona]
Draw.Rect(x, y, w, h)
  Draw.Text("pippo", x, y, w, h, 3)

così stampi un testo inserito al centro di un rettangolo, se non ti viene così è perchè nelò codice hai modificato i valori x o y o h  tra un comando e l' altro

al limite posta il codice che utilizzi
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 10 Febbraio 2012, 22:36:45
Codice: [Seleziona]
Draw.Rect(x, y, w, h)
  Draw.Text("pippo", x, y, w, h, 3)
così stampi un testo inserito al centro di un rettangolo, se non ti viene così è perchè nelò codice hai modificato i valori x o y o h  tra un comando e l' altro
Si, in effetti c'era qualcosa che non andava; purtroppo non me n'ero accorto. Solo che quel "3" posto come ultimo parametro del comando draw.text si riferisce ad un allineamento centrato in orizzontale e non, anche  in verticale. L'avevo già provato, ma per l'insistenza di un errore non visto non riuscivo ad ottenere il risultato desiderato. Col tuo esempio mi hai costretto a riguardare con maggiore attenzione il passo di programma e, finalmente l'errore è saltato agli occhi.
Continuando nel lavoro di stampa ho incontrato, fino a questo momento, ancora due difficoltà:
1) la larghezza delle colonne della griglia di stampa non rispetta sempre la proprozione rispetto alla gridview di partenza (vedi allegato).
2) la draw.text a volte supera e dimensioni della draw.rect. Non ricordo se nel tuo suggerimento iniziale sia gestita codesta eventualità; dovrò guardare. Nel comando non rilevo parametri di troncamento automatico, si da non invadere l'area del rettangolo immediatamente successivo.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 10 Febbraio 2012, 22:40:58
io semplicemente prima di iniziare a stampare controllavo la larghezza del testo di tutte le caselle ,andando quindi a modificare per ogni colonna la larghezza in modo che fosse un pelo + larga della massima larghezza del testo, idem per l' altezza delle celle , per ogni riga controllo il numero di righe che ha ogni cella e quindi di conseguenza aumento l'altezza.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 14 Febbraio 2012, 15:19:28
io semplicemente prima di iniziare a stampare controllavo la larghezza del testo di tutte le caselle ,andando quindi a modificare per ogni colonna la larghezza in modo che fosse un pelo + larga della massima larghezza del testo, idem per l' altezza delle celle , per ogni riga controllo il numero di righe che ha ogni cella e quindi di conseguenza aumento l'altezza.
Come sempre, ciascuna attuazione dipende da quello che si voglia ottenere. Io non ho necessità di stampare tutto il testo contenuto in ciascuna cella della pseudo griglia di stampa, perciò, qualora il testo ecceda la dimensione della cella, vorrei non andare a scrivere nell'area riservata alla cella immediatamente seguente della stessa riga di stampa. l'istruzione relativa
Codice: [Seleziona]
Draw.Text(Docum[i, j].Text), iX, iY, ilarghCol[j], iAltRg * 2, 1)
non funziona; sembra infatti, ma non è così, che il valore contenuto in ilarghCol[j], non corrisponda con l'effettivo spazio impegnato poi in stampa. Ciò determina, a mio modesto avviso, l'impossibilità ad ottenere stampe comprensibili.
 
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 14 Febbraio 2012, 20:13:09
considera che il valore di larghezza che inserisci in quel codice serve esclusivamente a gambas per  allineare correttamente il codice , sei tu che devi fornire all' istruzione di disegno un testo di lunghezza adeguata.

se non vuoi allargare le celle in base al testo dovrai per forza restringere il testo,  del resto se cesko non va alla montagna la montagna va da cesko  ;D

potresti provare con qualcosa di simile:
Codice: [Seleziona]

testo=Docum[i, j].Text
L= draw.textwhith(testo) ' questa funzione ritorna la larghezza occupata da un testo nella stampa

while L>ilarghCol[j]
testo=left(testo,len(testo)-1)
L= draw.textwhith(testo)
wend

Draw.Text(testo), iX, iY, ilarghCol[j], iAltRg * 2, 1)




ps il codice lo scritto a memoria, percui potrebbero esserci delle imperfezioni  :)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 14 Febbraio 2012, 21:42:17
La tua soluzione era già in onda, quando ho deciso di farti cenno della difficoltà incontrata. Il seguente codice è un esempio di quello che ho dovuto realizzare per stampare in maniera decente una parte di dati:
Codice: [Seleziona]
      SELECT CASE j
              CASE 1 '.......................... j contiene 1 quando punta al 2^ colonna della griglia di stampa
                $StriStmp = Left(Docum[i, j].Text)
                IF $StriStmp = "=" THEN
                    $StriStmp = Left(Docum[i, j].Text, 29)
                ELSE
                  IF $StriStmp = "#" THEN
                      $StriStmp = Left(Docum[i, j].Text, 33)
                  ELSE
------------ bla ----- bla ----- bla ---------------------------------
     END SELECT
      Draw.Text($StriStmp, iX, iY, ilarghCol[j], iAltRg * 2, 1)         
------------ bla ----- bla ----- bla ---------------------------------
Però non mi piace, a meno che non decida di utilizzare un set di caratteri monotype condensati, in modo da farne entrare il più possibile in ciascun rettangolo ed in modo tale che il punto, lo spazio, un numero, una lettera minuscola o maiuscola impegnino sempre la stessa area di stampa, ma quale sarebbe codesto font?
Io credevo che quanto vale per l'esposizione in gridview, valesse anche per il trasferimento di un valore stringa dentro un rettangolo dell'area di stampa.  :o
Ecco, invece ti ho dimostrato di non avere capito niente.  :'(
 :(
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 24 Febbraio 2012, 17:10:24
Ho faticato tantissimo, ma alla fine ce l'ho fatta; ho dovuto utilizzare però il font "Monospace" che, tutto sommato, non mi dispiace. Mi resterebbe ancora da definire la stampa in modalità draft e la preselezione del formto A5, in modo da non dovere intervenire manualmente nella finestra di dialogo del Printer.Setup ad ogni avvio-stampa.  :)  :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 25 Febbraio 2012, 09:19:18
Purtroppo non ho trovato come preselezionare il formato A5 come formato preferito nell'avvio-stampa, nè ho capito come impostare la modalità draft.  :-[
Se non ci sono altri suggerimenti, vorrei fare una prova parallela, prima di decedere. La prova a cui penso è rivolta all'uso del PdfWriter. Vi faccio sapere, però la prova appena sospesa è sempre aperta ad eventuali ulteriori modifiche.  :)
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 25 Febbraio 2012, 18:14:04
per la preselezione in a5 , basta che dopo il codice che richiama la configurazione della stampante che inserisci:

printer.size="A5"
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 25 Febbraio 2012, 22:15:14
per la preselezione in a5 , basta che dopo il codice che richiama la configurazione della stampante che inserisci:

printer.size="A5"
Ritengo che l'istruzione a cui ti riferisci sia:
Codice: [Seleziona]
Draw.Begin(PRINTER)
Io avevo già scritto la Printer.Size = "A5", ma subito prima della Draw.begin e non avevo ottenuto il risultato sperato. Ora ho provato come mi hai proposto
Codice: [Seleziona]
Draw.Begin(PRINTER)  
Printer.Size = "A5"
ma, ancora una volta, nella finestra di dialogo di Impostazione stampante, il formato carta preimpostato è  "A4"
 :(
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: fsurfing - 26 Febbraio 2012, 09:29:56
vabbe ma poi stampa in a5 perchè il codice è dopo la finestra di configurazione
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 26 Febbraio 2012, 12:48:57
vabbe ma poi stampa in a5 perchè il codice è dopo la finestra di configurazione
No, purtroppo non tiene conto; non capisco perchè, ma sul display della stampante compare il messaggio "Carta non corrisponde".Probabilmente tale parametro andrebbe impostato all'interno del comando Draw.Begin(PRINTER).
Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 27 Febbraio 2012, 08:50:49
Come dicevo qualche post fa, vorrei cominciare a conoscere Pdfwriter e perciò ho proceduto a scaricare il la classe presente nell'area di download. Ora dovrei copiare le classi necessarie, con le relative sottoclassi nel mio programma, solo che non conosco una procedura diversa dal copia-incolla. Ritengo però che possa esistere una funzione all'interno dell'ide di Gambas, ma come fare?
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: md9327 - 27 Febbraio 2012, 11:48:41
Se parliamo di Gambas3, basta che vai nella cartella del progetto, e poi in ".src" (cartella nascosta), e lì copiarci i sorgenti della libreria. Questo a meno che tu non abbia costruito una qualche albreatura di cartelle all'interno del progetto; nel qual caso cerca quella adatta a contenere la suddetta libreria.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 27 Febbraio 2012, 12:26:03
Se parliamo di Gambas3, basta che vai nella cartella del progetto, e poi in ".src" (cartella nascosta), e lì copiarci i sorgenti della libreria. Questo a meno che tu non abbia costruito una qualche albreatura di cartelle all'interno del progetto; nel qual caso cerca quella adatta a contenere la suddetta libreria.
No, io sono ancora ancorato  :) a G2.
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: md9327 - 27 Febbraio 2012, 13:55:35
Ancora più semplice...
Copy la libreria nella cartella del progetto in G2...  :D

Se hai già avviato l'IDE di Gambas, basta che fai un Refresh (dal menu) e ti si visualizzano i sorgenti...
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 27 Febbraio 2012, 16:39:35
Ancora più semplice...
Copy la libreria nella cartella del progetto in G2...  :D

Se hai già avviato l'IDE di Gambas, basta che fai un Refresh (dal menu) e ti si visualizzano i sorgenti...
Sarà facile, ma non ho capito.   :-\ Quando dici Copy la libreria, intendi la directory "PdfWriter-0.0.4" con tutto il suo contenuto di file siano essi .png, jpg, .form, ,clas, ...? Te lo chiedo pechè ho eseguito  copy dei soli file PdfWriter.class, PdfWriterFont.class, PdfTest.class, ma all'avvio ricevo una segnalazione di errore per il mancato riconoscimento della classe "Compress", relativamente alla riga
Codice: [Seleziona]
DIM cmp AS NEW Compress
:(
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: md9327 - 27 Febbraio 2012, 16:47:06
Ecco, ora iniziamo a parlare di cose serie...  ;D

I sorgenti da importare sono corretti. Il file Test è ovviamente un sorgente per testare alcune delle funzionalità di PdfWriter, per cui non è necessario al tuo programma, quindi puoi toglierlo una volta che hai compreso come funziona la libreria.

Quello che ti dà errore è il mancato riferiomento ad una delle librerie di Gambas, appunto Compress, che devi includere nella configurazione del tuo progetto, così come hai sicuramente fatto per le altre (es. KDE e/o GTK, e così via...). Se non ricordo male, per G2, la libreria si chiama gb.compress.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 28 Febbraio 2012, 14:45:59
Benissimo. Sto ora costruendo i parametri di stampa pagina nella funzione Header, però nella guida del Wiki non è indicato il parametro di preselezione del <<< formato carta >>>. Poichè in questa fase la stampa dovrebbe finire su fogli di formato "A5", ho provveduto a scrivere nella riga di chiamata della sottoclasse interessata (Reportpdf) in questa prima prova:
Codice: [Seleziona]
DocuPdf = NEW Reportpdf("Portrait", "mm", "A5")
Però non ho capito come passare la stringa con l'intestazione di pagina e la griglia contenente i dati da stampare.  ???
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 28 Febbraio 2012, 17:32:13
Ciao   :ciao:
Citazione
Però non ho capito come passare la stringa con l'intestazione di pagina e la griglia contenente i dati da stampare.  Che?!?

cerco di farti un veloce riassunto

Per ogni tipo di stampa devi creare una "sottoclasse" tipo come nell'esempio fatto da md "PdfTest.class"
mettiamo che vuoi fare una stampa di una lista di clienti, per velocizzare ti incollo la mia classe "clientipdf.class"
Codice: gambas [Seleziona]

' Gambas class file

Inherits PdfWriter


Public MyRS As Result

Public Sub Header()

  Me.SetFont("Arial", "BI", 20)
  Me.Cell(160, 6, "Rubrica Clienti", False, 0, "L", False)



End

Public Function Footer()
  Me.SetY(-15)
  Me.SetFont("Arial", "I", 8)
  Me.Cell(190, 6, "Pag. " & Me.PageNo() & " di {nb}", False, 0, "C", False)
End

Public Function Data()
  Dim sql As String

  Me.AddPage()
  Me.SetFillColor(192, 192, 192)
  Me.SetLineWidth(0.2)      
  Me.Line(10, 17, 200, 17)
  Me.SetLineWidth(0.1)
  Me.SetX(0)
  Me.SetY(20)
  Me.Ln()
  
    
                  sql = "select * from clienti"
      
                  MyRS = avvio.$myconn.Exec(sql)
                  
                              Me.SetFont("Arial", "", 8)    
                              Me.Cell(45, 5, "Cliente", True, 0, "C", False)
                              Me.Cell(85, 5, "Indirizzo", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono 2", True, 0, "C", False)
                              Me.Ln()
                  
                          Me.SetFont("Arial", "", 12)  
                          If MyRS.Available = True Then    
                              For Each MyRS
                              Me.Cell(45, 6, MyRS!cognome & " " & MyRS!nome, True, 0, "L", False)
                              Me.Cell(85, 6, MyRS!indirizzo & " " & MyRS!citta & " (" & MyRS!provincia & ")", True, 0, "L", False)
                              Me.Cell(30, 6, MyRS!telefono, True, 0, "L", False)
                              Me.Cell(30, 6, MyRS!telefono2, True, 0, "L", False)
                              Me.Ln()
                              Next
                          Endif      
      
    
  End


come vedi in questa classe ci sono 3 Public Function:
Header = intestazione
Data = Corpo
Footer = piè di pagina

penso che guardandoti la classe sia facile intuire come funziona

per inviare la procedura dal tuo form:

Codice: gambas [Seleziona]

    Dim pdf As clientipdf
   Randomize
  pdf = New clientipdf("Portrait", "mm", "A4")
  pdf.Open()
  pdf.AliasNbPages()
  pdf.Data
  pdf.Output(User.Home & "/miastampa.pdf", False)


Attenzione, questo non manda la stampa, ma ti crea un file pdf
Per l'invio alla stampante o anteprima etcc. non hai che da chiedere, oppure guardati gli esempi che avevamo fatto
http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1056.0;attach=622 (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1056.0;attach=622)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 28 Febbraio 2012, 18:06:47
@ Giolia:
Benissimo, hai ripetuto con un esempio pratico quanto già speiagto nel wiki. La spiegazione è chiara; alla fine del lavoro viene prodotto un file .pdf, però penso che il file .pdf debba contenere i dati da trattare. A me non risulta chiaro come passare alla sottoclasse detti dati, che nel mio caso specifico sono rappresentati dall stringa di testata di pagina e da una gridview  compilata dallo stesso programma. L'altra cosa che non capisco è perchè l'istruzione di chiamata della sottoclasse riporta come ultimo parametro il valore "A4" quando io dovrei fare riferimento al formato "A5".
L'esempio che mi hai proposto va a rilevare i dati da trattare con una query ad un DB, ma non è quello che dovrei fare io.
Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 28 Febbraio 2012, 18:48:31
allora per la testata nel mio esempio c'è il titolo "Rubrica Clienti"

Se il testo che devi scrivere lo devi ricavare per esempio da un textbox di un form per esempio puoi fare così:
Citazione
Me.Cell(160, 6, fmain.textbox1.text , False, 0, "L", False)

o in una qualsiasi altra maniera che puoi passare un dato.
Per quanto riguarda i dati che hai nella gridview puoi caricarli in un ciclo for come ho fatto nell'esempio, io ho usato dati di un database ma puoi buttarci dentro quello che vuoi.
Citazione
L'altra cosa che non capisco è perchè l'istruzione di chiamata della sottoclasse riporta come ultimo parametro il valore "A4" quando io dovrei fare riferimento al formato "A5"
Io ti ho fatto solo un'esempio, puoi usare il formato che vuoi
Citazione
pdf = New clientipdf("Portrait", "mm", "A5")  
o ancora
Citazione
pdf = New clientipdf("Landscape", "mm", "A5")  
Caso mai se non ti è chiaro prova a postarmi il lavoro che vuoi fare, magari ci capiamo meglio  ;)
Ciao

P.S.
Come carichi i dati nella tua gridview?
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 28 Febbraio 2012, 23:37:34
Ho capito; per la verità non mi piace, perchè pensavo che dovesse essere la procedura chiamante a passare i dati occorrenti e non che potessero essere  le funzioni HeaderData e Footer a prelevare i dati occorrenti da campi di memoria della chiamante.  :-\ Tuttavia, farò come mi hai detto. Ti farò sapere. Grazie.
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 01 Marzo 2012, 11:36:52
Allora ....
Ho modificato le istruzioni dielle sottoclassi Header e Data di Pdfwriter, per ottenere il file pdf coi dati della gridview compilata in FMain.class ed inserita in Fmain.Form. Ho incontrato, fin ad ora, due difficoltà: non è riconosciuto il font"Bitstream Charter" e l'ho momentaneamente sostituito con "courier". La sottoclasse header non da problemi, mentre, nella sosstoclasse Data non riesco a puntare le righe di della gridview; infatti già nella prima riga di estrazione della testata di ciascuna colonna ricevo il messaggio di "sconosciuto". Il gruppo di istruzioni è:
'--------------------------- Prepara riga di testa della griglia -----------------------------------------         
Codice: gambas [Seleziona]
  ME.SetFont("courier", "B", 8)         
  ME.Cell(10, 5, FMain.Form.GridStmp.Columns[0].Text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 35, FMain.GridStmp.Columns[1].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 370, FMain.GridStmp.Columns[2].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 500, FMain.GridStmp.Columns[3].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 580, FMain.GridStmp.Columns[4].text, TRUE, 1, "C", TRUE)
  ME.Ln()

Alla riga n.2 ricevo la segnalazione unknown sYmbol 'Form' in class 'Fmain'
mentre, se la riscrivo come la riga n.3, mi viene segnalato  unknown sYmbol 'GridStmp' in class 'Fmain'
Purtroppo non ho trovato nemmeno un riferimento simile nel link che mi hai suggerito nella tua ultima risposta e non ho capito come devo scrivere.  ???
 :(



Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: md9327 - 01 Marzo 2012, 11:43:13
La classe PdfWriter è specializzata a scrivere documenti pdf, partendo da dati forniti dall'utente (o dal programmatore...).

I due metodi (che nelle ultime versioni ho implementato anche come eventi), vengono scatenati quando la libreria si accorge dei limiti del foglio. E' ovvio che l'utilizzo di questi metodi non è obbligatorio, ma sicuramente è utile per definire un header e un footer specifici e con le caratteristiche volute.

Il metodo Data serve invece per passare i dati per le pagine. Questi possono essere delle tabelle oppure a formattazione libera, ovviamente è necessario utilizzare i vari metodi e funzioni che la libreria mette a disposizione.

La creazione di un tabellare è indipendente dalla sorgente, per cui stà al programmatore fornire le giuste informazioni e i dati da rappresentare. Con questo dico che vi sono funzioni specializzate a estrarre i dati da, per esempio, un database.

Passando i dati al metodo Data(), questi vengono stampati sul pdf. Appena la libreria si accorge che è terminato il foglio, scatena l'evento (o chiama) Footer, che può essere utilizzato magari per stampare il numero di pagina corrente.
Identica cosa avviene con l'Header ovvero, appena si avvia un nuovo foglio, il metodo (o evento) viene chiamato, permettendo al programmatore di scrivere la testata del documento, ovviamente se è necessario... Questa cosa diviene utile appunto per i tabellari, permettendo di stampare per ogni pagina la stessa intestazione e/o piè di pagina.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: md9327 - 01 Marzo 2012, 11:47:51
Allora ....
Ho modificato le istruzioni dielle sottoclassi Header e Data di Pdfwriter, per ottenere il file pdf coi dati della gridview compilata in FMain.class ed inserita in Fmain.Form. Ho incontrato, fin ad ora, due difficoltà: non è riconosciuto il font"Bitstream Charter" e l'ho momentaneamente sostituito con "courier". La sottoclasse header non da problemi, mentre, nella sosstoclasse Data non riesco a puntare le righe di della gridview; infatti già nella prima riga di estrazione della testata di ciascuna colonna ricevo il messaggio di "sconosciuto". Il gruppo di istruzioni è:
'--------------------------- Prepara riga di testa della griglia -----------------------------------------         
Codice: gambas [Seleziona]
  ME.SetFont("courier", "B", 8)         
  ME.Cell(10, 5, FMain.Form.GridStmp.Columns[0].Text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 35, FMain.GridStmp.Columns[1].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 370, FMain.GridStmp.Columns[2].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 500, FMain.GridStmp.Columns[3].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 580, FMain.GridStmp.Columns[4].text, TRUE, 1, "C", TRUE)
  ME.Ln()

Alla riga n.2 ricevo la segnalazione unknown sYmbol 'Form' in class 'Fmain'
mentre, se la riscrivo come la riga n.3, mi viene segnalato  unknown sYmbol 'GridStmp' in class 'Fmain'
Purtroppo non ho trovato nemmeno un riferimento simile nel link che mi hai suggerito nella tua ultima risposta e non ho capito come devo scrivere.  ???
 :(





Attualmente ci sono alcune limitazioni circa i tipi di carattere che è possibile utilizzare.

I riferimenti a oggetti di altre classi devono essere pubblici, ovvero GridStmp deve essere raggiungibile da altre classi, quindi occorre definirla pubblica (vedi impostazioni di progetto).
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 01 Marzo 2012, 15:49:58
Ma è possibile definire una gridview pubblica?
Io ho aggirato l'ostacolo eseguendo una copia della gridview in un nuovo oggetto definito pubblico:
Codice: gambas [Seleziona]
PUBLIC GriStampMov AS Object
-------- bla  bla  bla  -----------------       
GriStampMov = GridStmp
 iTRgStampa = iRgGriStamp              'ultima riga di dettaglio
  RANDOMIZE
  pdf = NEW Reportpdf("Portrait", "mm", "A5")
  pdf.Open()
  pdf.AliasNbPages()
  pdf.Data
  pdf.Output(User.Home & "/ContFamStampe", FALSE)
-------- bla  bla  bla  -----------------

PUBLIC FUNCTION Data()    'corpo di una pagina
DIM i AS Integer
DIM iTotRg AS Integer
'---------------------------------------------------------
  ME.AddPage()
  ME.SetFillColor(192, 192, 192)
  ME.SetLineWidth(0.2)     
  ME.Line(10, 10, 200, 10)
  ME.SetLineWidth(0.1)
  ME.SetX(0)
  ME.SetY(50)
  ME.Ln()
'--------------------------- Prepara riga di testa della griglia -----------------------------------------         
  ME.SetFont("courier", "B", 8)         
  ME.Cell(10, 35, FMain.GriStampMov.Columns[1].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 370, FMain.GriStampMov.Columns[2].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 500, FMain.GriStampMov.Columns[3].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 580, FMain.GriStampMov.Columns[4].text, TRUE, 1, "C", TRUE)
  ME.Ln()
'-----------------
'--------------------------- Prepara righe di dettaglio della griglia -----------------------------------------           
  ME.SetFont("courier", "", 8)
  iTotRg = FMain.iTRgStampa
  FOR i = 1 TO iTotRg
    ME.Cell(10, 5, FMain.GriStampMov[i, 0].text, TRUE, 1, "R", TRUE)
    ME.Cell(10, 35, FMain.GriStampMov[i, 1].text, TRUE, 1, "L", TRUE)
    ME.Cell(10, 370, FMain.GriStampMov[i, 1].text, TRUE, 1, "L", TRUE)
    ME.Cell(10, 500, FMain.GriStampMov[i, 2].text, TRUE, 1, "R", TRUE)
    ME.Cell(10, 580, FMain.GriStampMov[i, 3].text, TRUE, 1, "R", TRUE)
    ME.Ln()
  NEXT
END


L'ampiezza (param.w) è puramente indicativa, in quanto non mi sono ancora reso conto come regolarmi, quindi ti prego di non tenerne conto. Così facendo il file pdf è stato creato, ma, alla sua prima vita, presenta 128 pagine tutte uguali cioè con solo rettanglo della riga di testata della gridview. Ci devo lavorare un pò su.
Ciao.

Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 01 Marzo 2012, 17:03:04
Diciamo che ho capito.  ;)
Sono riuscito a stampare l'intera griglia, rispettando le colonne ed il loro contenuto. Non ho potuto però evitare che il contenuto di una cella, essendo più lungo della sua area di stampa nella riga, andasse ad invadere lo spazio riservato alla cella immediatamente successiva, per cui alla fine la stampa risulta confusa ed, in parte, illeggibile. Non volendo usare il formato multiriga e multirect, potrei ottenere il troncamento dei caratteri eccedenti il parametro w?
É possibile poi spostare più a sinistra il margine Sx di ciascuna riga da stampare? Infatti non capisco come mai il comando
Codice: [Seleziona]
ME.Line(0, 7, 150, 7)
occupi tutto lo spazio fisico del foglio, mentre , pur avendo posto ME.SetX(-5) il margine Sx di ciascuna riga di dettaglio cominci sempre a circa mm.14 dall'estrema sinistra del foglio di carta.
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 01 Marzo 2012, 20:17:27
Ciao
Prova con
Citazione
Me.SetLeftMargin(0)
sinceramente non l'ho mai provato :-[
Una buona guida, che mi aveva consigliato MD a suo tempo è questa:
http://www.fpdf.org/ (http://www.fpdf.org/)
MD ha fatto il porting da questa classe, la puoi trovare molte risposte.
Naturalmente non hai che da chiedere  :ciao:
Ciao :2birre:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: md9327 - 02 Marzo 2012, 13:39:09
Per poter gestire una multiriga devi impostare il codice nel metodo Data.
In realtà, ma funzione MultiLine utilizza le proprietà e i metodi della classe stessa, suddividendo il testo in modo da farlo entrare in un'area ben definita.
Ovviamente la stessa cosa la puoi fare tu, ma ti consiglierei di farla fare alla specifica funzione, che è studiata proprio a tal fine.
Eventualmente, puoi dare un'occhiata al codice, così da capire come funziona la logica di divisione...
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 02 Marzo 2012, 16:11:47
@ Golia:
Si, avevo già letto FPDF, però in maniera assai sommaria, e di conseguenza non mi ero accorto della possibilità di gestitre i margini di stampa. Ora Ho guardato meglio ed ho provato. La funzione è veramente efficace. Ho ottenuto quello che volevo.

@ md9327:
Come ho  già detto precedentemente, al momento non mi interessa la funzione multiriga, interessa invece il troncamento dei caratteri eccedenti la cella di stampa. Leggendo il manuale FPDF ho scoperto la funzione GetStringWidth e l'ho provata. La lunghezza che restituisce, naturalmente, non corrisponde col valore restituito da Len(stringa) che fornisce il n° di caratteri. Perciò dovendo limitare il troncamento della stringa da inviare in stampa alla larghezza della cella di destinazione, ho risolto con l'applicazione del seguente codice:
Codice: [Seleziona]
$StriMia = FMain.GriStampMov[i, 1].text
ilun = ME.GetStringWidth($StriMia)
WHILE iLun > 71
      ill = Len($StriMia)
      $Strimia = Left($StriMia, ill - 1)
      ilun = ME.GetStringWidth($StriMia)
WEND
ME.Cell(72, 4, $StriMia, TRUE, 0, "L", FALSE)
Purtroppo non ho potutto ottenere un unico troncamento, ma un troncamento progressivo fino ad arrivare alla lunghezza prevista per la cella da impegnare in stampa.
Il risultato finale è perfetto.
Se doveste conoscere un procedimento di calcolo più rapido, sono ben pronto a recepirlo.
A questo punto credo proprio di continuare la prova finio a produrre la stampa del file PDF creato.  ;)  ;D
 :ciao:  :ciao:


PS: potreste indicarmi una tabella di  colori e valori  per usare bene il comando "SetTextColor"?
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 02 Marzo 2012, 18:25:13
Citazione
PS: potreste indicarmi una tabella di  colori e valori  per usare bene il comando "SetTextColor"?
Tipo questa? http://it.wikipedia.org/wiki/Lista_dei_colori (http://it.wikipedia.org/wiki/Lista_dei_colori)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: vuott - 02 Marzo 2012, 19:06:06
Tipo questa? http://it.wikipedia.org/wiki/Lista_dei_colori (http://it.wikipedia.org/wiki/Lista_dei_colori)

Aggiungo:
http://webspace.tiscali.it/guidahtml/codicicolori/
http://riemann.unica.it/studenti/guida/colori.html
http://fabrizio.zellini.org/tabella-nomi-e-codici-html-rgb-dei-colori
http://users.libero.it/luclep/itaint.htm
http://www.paginainizio.com/webmaster/strumenti/colori.htm
http://www.web-link.it/html/colori.htm
http://johncfish.com/bggallery/otherchart/index.htm
http://www.webdesigns.it/colori2.htm
http://www.computerhope.com/htmcolor.htm
http://html-color-codes.info/
http://www.december.com/html/spec/colorcodes.html
http://sukumal.brinkster.net/meaploy/angel/color.html
http://www.w3schools.com/html/html_colors.asp
http://www.2createawebsite.com/build/hex-colors.html



Se poi vuoi conoscere i codici dei colori presenti in un'immagine:
http://www.atalasoft.com/31apps/ColorSchemeGenerator/default.aspx
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: alcresio - 02 Marzo 2012, 19:14:56
Citazione
PS: potreste indicarmi una tabella di  colori e valori  per usare bene il comando "SetTextColor"?
Tipo questa? http://it.wikipedia.org/wiki/Lista_dei_colori (http://it.wikipedia.org/wiki/Lista_dei_colori)

Se hai bene in mente il triangolo dei colori in RGB potresti fare una cosa del genere:

Function RGB(R As Byte, G As Byte, B As Byte) As Integer
 Dim sHex As String
 sHEX = Hex$(R, 2) & Hex$(G, 2) & Hex$(B, 2)
 sHEX = "&H" & sHEX & "&"
 Return Val(sHEX)
End


Così passi il colore in rgb e lo ripeschi in hex

Oppure
puoi usare il programmino in allegato che scrisse la mia compagna per mostrare ai miei allievi fotografi lo spettro dei colori
non è un gran ché ma riporta il valore esadecimale e decimale di tutti i colori dello spettro rgb standard
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 02 Marzo 2012, 22:33:43
@ Alcresio:
Citazione
Oppure
puoi usare il programmino in allegato che scrisse la mia compagna per mostrare ai miei allievi fotografi lo spettro dei colori
non è un gran ché ma riporta il valore esadecimale e decimale di tutti i colori dello spettro rgb standard
Ho provato ad eseguirlo, ma ho ricevuto la segnalazione di errore "Non è un programma scritto in Gambas2. É forse scritto in G3?

@: Golia e vuott:
Si esattamente. Naturalmente mi interessa una scala di colori cge riporti i tre valori di r,g,b.  ;D
Grazie a tutti.

Proprio ora ho finito l'ultima prova di scrittura del file PDF e sono veramente  ;D perchè sono riuscito con pochissimo impegno ad ottenere quello che volevo, compresa la selezione automatica del formato A5. Perciò, alla fine, mi sono deciso di adottare la funzione PDFWriter. Ora mi resta solo di capire come stampare il file appena salvato.  ;)  ;D
 :ciao:



Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: vuott - 02 Marzo 2012, 23:38:08
@ Alcresio:
Citazione
Oppure
puoi usare il programmino in allegato che scrisse la mia compagna per mostrare ai miei allievi fotografi lo spettro dei colori
non è un gran ché ma riporta il valore esadecimale e decimale di tutti i colori dello spettro rgb standard
Ho provato ad eseguirlo, ma ho ricevuto la segnalazione di errore "Non è un programma scritto in Gambas2. É forse scritto in G3?

A me quel programma funziona regolarmente.  :coder: Uso Gambas-3.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 03 Marzo 2012, 00:31:23
Citazione
Ora mi resta solo di capire come stampare il file appena salvato

Codice: gambas [Seleziona]
Dim hStampa As Process
hStampa = Shell ("lpr " & Myfilepdf)


Ho fatto un form che fa da anteprima invio stampa scelta stampante etcc, però è con G3.
Ma che aspetti a passare a g3? ;)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: alcresio - 03 Marzo 2012, 00:37:44
Ho provato ad eseguirlo, ma ho ricevuto la segnalazione di errore "Non è un programma scritto in Gambas2. É forse scritto in G3?
Si, è stato convertito in GB3... non credo di avere la versione in gb2, ho deciso di migrare al 3 senza rimpianti (spero)!
Ma puoi aprire il sorgente con kwrite o gedit e vedere cosa fa. è davvero molto semplice



Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 03 Marzo 2012, 22:20:23
Ma che aspetti a passare a g3? ;)

La tua domanda mi ha messo un pò di curiosità ed ho cercato G3 nei repository di fedora. Non è ancora disponibile, infatti trovo ancora G2, per cui, anche volendolo, sono costretto ad aspettare che fedora lo attivi.
La cosa mi dispiace perchè mi ero deciso proprio ieri ad installare anche G3 in modo da portarvi il mio programma e prepararmi così ad  una riorganizzazione del mio pc.  :-\
Ora mi direte: ma perchè non parti dal sorgente? Perchè, per quello che ho capito, è una procedura assai laboriosa che richiede anche una buona conoscenza sul da farsi ed io non sono assolutamante all'altezza. Quindi devo aspettare.
Comunque, grazie a tutti.
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 04 Marzo 2012, 13:45:47
Citazione
Perchè, per quello che ho capito, è una procedura assai laboriosa che richiede anche una buona conoscenza
Trova in rete le istruzioni per farlo!
Quando io installo gambas nella mia ubuntu...
Citazione
scarica Gambas3 da quìhttp://sourceforge.net/projects/gambas/files/gambas3/gambas3-3.0.0.tar.bz2/download
poi da terminale
cd /usr/src
sudo tar xvfj /home/.../Sacaricati/gambas3-3.0.0.tar.bz2

cd /usr/src/gambas3-3.0.0
./reconf-all
sudo ./configure -C
sudo make
sudo make install
..pensi cha ne capisca qualcosa?  ;D
Ciao
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: sotema - 04 Marzo 2012, 14:59:31
Citazione
ed io non sono assolutamante all'altezza.
ma non sei tu lo stesso che...
Non sopravvalutate mai i compiti vi si chiedono, né per la mole, né per la difficoltà: singolarmente preso, ogni argomento non è difficile. Credete sempre nel fatto che tutto è alla vostra portata.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 04 Marzo 2012, 15:42:51
@ Golia: Fedora non è Ubuntu.  :) Voglio dire ... le procedure non sono uguali.
@  sotema:   :evil: Perchè me l'hai ricordato?  ;D Può comunque capitare che, col passare del tempo, ci si stanchi. ... Penso che dovrò cambiare il mio motto. ;D ;D
 :ciao:  :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 04 Marzo 2012, 15:57:26
Citazione
Golia: Fedora non è Ubuntu.  Sorriso Voglio dire ... le procedure non sono uguali.
Questo lo so :)
Volevo dirti che sono riuscito a installare gambas 3 perchè ho trovato le istruzioni per farlo..non che quelle vanno bene per fedora..leggi meglio ;)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: sotema - 04 Marzo 2012, 16:03:39
Prova così: (suppongo tu abbia Fedora16)

- Installi i prerequisiti:
Citazione
yum groupinstall "Development Tools" "Development Libraries"
e poi
Citazione
# yum install cairo-devel libsqlite3x-devel sqlite2-devel gtk2-devel gtkglext-devel imlib2-devel librsvg2-devel poppler-devel qt-devel libv4l-devel SDL-devel SDL_sound-devel SDL_ttf-devel SDL_net-devel SDL_mixer-devel SDL_image-devel SDL_gfx-devel SDL_Pango-devel firebird-libfbclient unixODBC-devel postgresql-devel libXtst-devel mysql-devel pcre-devel mesa-libGLU-devel mesa-libGLw-devel mesa-libGL-devel glew-devel firebird-devel dbus-devel libzip libzip-devel bzip2-devel libcurl-devel qt-webkit-devel libxml2-devel
per la stabile :
- scarichi GB3 dalla homepage http://gambas.sourceforge.net/en/main.html (http://gambas.sourceforge.net/en/main.html)
- scompatti il file scaricato
- ti posizioni nella cartella di gambas3
- esegui:
$ ./reconf-all
$ ./configure
$ make
# make install (da root)

per la svn:
- crei una cartella gambas3
$ cd gambas3
$ svn checkout https://gambas.svn.sourceforge.net/svnroot/gambas/gambas/trunk/
$ cd trunk (la cartella trunk viene creata da subversion nella posizione in cui è impartito il comando)
$ ./reconf-all
$ ./configure -C
$ make
# make install (da root)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 05 Marzo 2012, 17:17:50
@ Golia:
Ho quasi completato il lavoro di stampa. Dico quasi perchè non capisco come, pur avendo preselezionato il formato A5, la stampa si avvia sempre su un formato A4 e, di conseguenza , la stampamante s'arresta per "Errore di Formato". Esattamente:
1) prima di aggiungere il comando Shell, al primo avvio di stampa dal file pdf creato, si apre la finestra di stampa dove il formato di default è "A4", perciò devo modificarlo manualmente in "A5".
2) dopo avere inserito la riga
Codice: [Seleziona]
hStampa = SHELL ("lpr " & User.home & "/ContFamStampe")
ricevo sempre, sul display della stmapnte il messaggio
 "Errore di Formato".
Per preselezionare  il formato A5 ho agito così:
Dentro la procedura di chiamata della funzione PdfWriter:
Codice: [Seleziona]
PUBLIC SUB PulSTampaClk_Mio()
------- bla ------ bla ------- bla
  pdf = NEW Repo03pdf("Portrait", "mm", "A5")
  pdf.Open()
  pdf.AliasNbPages()
  pdf.Data
  pdf.Output(User.Home & "/ContFamStampe", FALSE)
  hStampa = SHELL ("lpr " & User.home & "/ContFamStampe")
END
Dentro PdfWriter
Codice: [Seleziona]
PUBLIC SUB _new(OPTIONAL orientation AS String = "P", OPTIONAL unit AS String = "mm", OPTIONAL form AS String = "A5")
------- bla ------ bla ------- bla
Inoltre, a prescindere da come si comporti  PDfWriter, il comando  "lpr" dovrebbe contenere un parametro di scelta del formato. Ebbene, io non sono riuscito a trovarlo.  ???  :o
Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 05 Marzo 2012, 17:42:17
Ciao
Hai provato aprire il file con un lettore documenti e inviare la stampa da la, controllando il formato? tanto per vedere se pdfwriter fa il suo dovere e che il problema non sia l'invio alla stampante.

Citazione
Dentro PdfWriter
Codice:

PUBLIC SUB _new(OPTIONAL orientation AS String = "P", OPTIONAL unit AS String = "mm", OPTIONAL form AS String = "A5")
------- bla ------ bla ------- bla
Questo non dovrebbe servire, scegli già il formato con  pdf = NEW Repo03pdf("Portrait", "mm", "A5").
Un'altra cosa da guardare sono le misure dell'A5, che le trovi dentro la classe PdfWriter, fai una ricerca su questa riga:
Citazione
Case "a5"
, sotto vedi ci sono dei parametri, prova a cambiarli, anche se credo però MD non abbia sbagliato.
Comunque proviamo intanto a individuare se il problema è pdfWriter o l'invio alla stampante
Ciao
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 05 Marzo 2012, 18:47:33
Ciao
Hai provato aprire il file con un lettore documenti e inviare la stampa da la, controllando il formato? tanto per vedere se pdfwriter fa il suo dovere e che il problema non sia l'invio alla stampante.
Si. L'ho fatto sempre con Evince e, al primo avvio (la prima volta dopo avere acceso il pc) la finestra di impostazione stampa mi fornisce  come preimpostazione il formato A4.
Ora ho provato a preimpostare "A3", ma in Evince trovo sempre il valore di preimpostazione "A4". Ho seguito in PDFWriter il percorso passo dopo passo  dentro la SELECT CASE Lower(form) ed ho potuto riscontrare che il contenuto di $fw  e $fh sono rispondenti al formato richiesto, però, ciò nonostante, l'automatismo relativo, nel documento PDF prodotto, riporta sempre "A4". Ora non vorrei portarti fuoiri strada, ma ho notato che la SUB _beginpage di PdfWriter è richiamata solamente nell'AddPage. É possibile che non venga richiamata per la prima pagina di documento?
Ciao.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: sotema - 05 Marzo 2012, 21:14:09
Citazione
noltre, a prescindere da come si comporti  PDfWriter, il comando  "lpr" dovrebbe contenere un parametro di scelta del formato. Ebbene, io non sono riuscito a trovarlo.

lpr -o media=A5

l'opzione  -o serve a specificare proprio i parametri del formato di stampa:

lpr -o landscape  --> imposta il formato pagina landscape
lpr -o scaling=75 ---> riduce la stampa al 75%
...
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 05 Marzo 2012, 23:53:01
@ sotema:
grazie per l'indicazione, ma dal man lpr si legge, per la parte pertinente all'argomento corrente:
Citazione
NAME
       lpr - print files

SYNOPSIS
       lpr  [  -E  ]  [  -H  server[:port]  ]  [  -U  username ] [ -P destina‐
       tion[/instance] ] [ -#  num-copies  [  -h  ]  [  -l  ]  [  -m  ]  [  -o
       option[=value] ] [ -p] [ -q ] [ -r ] [ -C/J/T title ] [ file(s) ]

OPTIONS
       The following options are recognized by lpr:
 -o option[=value]
            Sets a job option.
In pratica non è  riportato l'elenco dei valori possibili per  -o option[=value]
Mi potresti indicare dove posso reperire le informazioni necessarie?
 :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: vuott - 06 Marzo 2012, 00:16:42
In pratica non è  riportato l'elenco dei valori possibili per  -o option[=value]
Mi potresti indicare dove posso reperire le informazioni necessarie?

 :ciao: Forse ti può essere utile una interessante e preziosa indicazione di Milio (vedi:http://www.gambas-it.org/smf/index.php?topic=836.msg8960#msg8960 (http://www.gambas-it.org/smf/index.php?topic=836.msg8960#msg8960))  :-[ , relativa a CUPS - Command-Line Printing and Options, che qui riporto:
http://www.cups.org/documentation.php/options.html (http://www.cups.org/documentation.php/options.html)
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 07 Marzo 2012, 00:01:05
@ vuott:
grazie anche a te, ho trovato il dettaglio che cercavo.

@sotema:
ho applicato il comando lpr con l'opzione media=A5 e la shell, pur leggendo da un file .pdf, un documento in formato A4, ha prodotto la stampa nel desiderato formato A5.

@Golia:
Resta tuttavia il problema del malfunzionamento del formato nella scrittura del file .pdf da parte del PdfWriter. Aspetto tue notizie per considerare risolta la presente discussione.

Cia a tutti.
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 07 Marzo 2012, 11:57:23
Ciao
Ho fatto una prova col mio programma,
Citazione
pdf = New Stclienti("Portrait", "mm", "A5")
Ho solo cambiato il formato, e il file creato mi sembra corretto,
Prova 1:
Stampo direttamente con lpr, la stampa mi riempe un'a4 zommando il tutto, cioè aumentando la dimensione dei caratteri per riempire l'a4
Prova 2:
Apro con Evince il file e mi sembra corretto
Con le mie stampanti non posso selezioare il formato A5
Ho scoperto un comportamento strano di evince, resta memorizzato il formato della stampa precedente, se faccio una stampa in A3(selezionando il formato da Evince), il documento successivo anche se A4, l'impostazione resta A3 quindi devo cambiarla.
Da Evince, stampa/avanzate scelgo l'opzione "preserve dimension", mando la stampa e la stampa è corretta, su 2 pagine la stampa viene riempita solo nella misura di un A5.
Quindi PdfWriter fa il suo lavoro correttamente, il file viene salvato nel formato giusto.
A questo punto devi trovare la soluzione per l'invio alla stampa. Mi spiace ma di più non so, anche perchè per provare penso ci voglia la stampate che accetti A5.
Penso si deva trovare l'opzione "preserve dimension" per lpr
Fammi sapere, ciao
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 07 Marzo 2012, 13:05:10
Una soluzione potrebbe essere aprire il file direttamente con evince invece che mandarlo in stampa con lpr
Citazione
hStampa = SHELL ("evince " & User.home & "/ContFamStampe")
dimenticavo di dirti di controllare la misura delle celle in orrizontale, ad esempio in a4 io non supero i 190 mm, così:
                              Me.Cell(45, 5, "Cliente", True, 0, "C", False)
                              Me.Cell(85, 5, "Indirizzo", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono 2", True, 0, "C", False)
                              Me.Ln()
in a5 dovrebbero essere in teoria 145
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Picavbg - 07 Marzo 2012, 22:55:30
Una soluzione potrebbe essere aprire il file direttamente con evince invece che mandarlo in stampa con lpr
Citazione
hStampa = SHELL ("evince " & User.home & "/ContFamStampe")
dimenticavo di dirti di controllare la misura delle celle in orrizontale, ad esempio in a4 io non supero i 190 mm, così:
                              Me.Cell(45, 5, "Cliente", True, 0, "C", False)
                              Me.Cell(85, 5, "Indirizzo", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono 2", True, 0, "C", False)
                              Me.Ln()
in a5 dovrebbero essere in teoria 145
Evince produce però un'anteprima che a me non serve, perchè l'anteprima è rappresentata dalla griglia già visibile in uno specifico Form dove sono situati anche due pulsanti, uno  per l'uscita senza stampa e l'altro per dare corso alla stampa.
Ho guardato la somma delle lunghezze delle mie righe di comando Cell e raggiungono la lunghezza massima di 142.
Comunque, visto che il comando 
Codice: [Seleziona]
 hStampa = SHELL ("lpr -o media=A5 " & User.home & "/ContFamStampe")
risolve benissimo il mio problema, per me va già bene così e non credo che sia necessario aggiungere altre prove.  ;)  ;D ;D
 :ciao: :ciao:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: Golia - 07 Marzo 2012, 23:46:54
 :ok: Bene :2birre:
Titolo: Re: Nuovo Passo --->> La stampa
Inserito da: vuott - 08 Dicembre 2012, 16:57:50
$ svn checkout https://gambas.svn.sourceforge.net/svnroot/gambas/gambas/trunk/


ATTENZIONE !
Riguardo a questa riga, è necessario leggere assolutamente questo messaggio:

http://www.gambas-it.org/smf/index.php?topic=2454.0