Autore Topic: [Risolto] Nuovo Passo --->> La stampa  (Letto 11107 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #30 il: 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 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.

:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #31 il: 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"]
« Ultima modifica: 05 Febbraio 2012, 09:27:50 da fsurfing »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #32 il: 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.
« Ultima modifica: 08 Febbraio 2012, 11:31:40 da Picavbg »
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #33 il: 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:
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #34 il: 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

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #35 il: 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.
 :(
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #36 il: 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

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #37 il: 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.
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #38 il: 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.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #39 il: 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.
 
« Ultima modifica: 14 Febbraio 2012, 15:22:49 da Picavbg »
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #40 il: 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  :)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #41 il: 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.  :'(
 :(
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #42 il: 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:
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #43 il: 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:
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #44 il: 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"