Newsgroup: it.comp.lang.visual-basic
Titolo: Picture1.Line - caratteri box

Scusatemi; faccio una premessa iniziale per inquadrare il mio problema.
Nel mio vecchio programma in clipper (DOS), utilizzavo i caratteri box per
stampare i miei moduli (bolle, fatture, ecc.).
Tutto funzionava a dovere, potevo stampare in 10 o 12 cpi o anche in
compresso.
Avevo certo un sacco di altri problemi legati al tipo di stampante che
doveva essere EPSON o comunque compatibile EPSON.
Non funzionava le la stampante era collegata alla USB e altri ancora.
Finita la premessa, ribadisco solo che i caratteri box (gestiti solo da
pochi font sotto windows) sono caratteri a tutti gli effetti ed occupano
quindi lo spazio di un carattere qualsiasi (parlo di font a spaziatura
fissa).
Attualmente sto cominciando a riprodurre quel vecchio programma in VB.
In questo momento mi sto concentrando sulla stampa della modulistica.
Pensavo di utilizzare la stessa tecnica, ma mi è stata consigliata una
strada diversa da più persone che mi hanno suggerito:
Per disegnare i riquadri con l'oggetto printer devi utilizzare:
PRINTER.LINE (eccetera)
Bene.
Ho iniziato a sperimentare simulando la stampa in un PictureBox con le
seguenti impostazioni:
width  =  printer.scalewidth
height = printer.scaleheight
scalemode = 4 (carattere)
        (dovevo forse usare 1 = twip che è lo standard)
        (o ancora 0 = user) ?
Le prime prove, anche se vedovo solo l'angolo superiore sinostro del foglio,
sembravano corrette.
Ho iniziato a provare i rettangoli ed ho fatto la prima scoperta:
- la linea in verticale non passa al posto di un carattere (come per i box
precedenti) ma esattamente tra due caratteri contigui.
- lo stesso avviene per l'orrizzontale, cioè a meta strada tra una riga e
l'altra.
Quindi, teoricamente, le linee non occupano spazio di stampa.
Concretamente però, se non si vogliono i caratteri appiccicati alle linee,
occorre lasciare almeno due blank  per lasciare spazio orrizzontale per una
linea di incolonnamento verticale.
Va bè, non è un grosso problema.
Tutto questo con il font SystemPC.
La seconda scoperta, molto peggiore, l'ho fatta modificando il font a
CourierPC:
- mentre i caratteri occupavano spazi diversi, i rettangoli venivano
disegnati nella medesima posizione precedente e quindi completamente fuori
posizione rispetto al testo.
Cosa fare?
Ho anche fatto alcune prove, con scarsi risultati, per far vedere la pagina
completa nella PictureBox.
Per me sarebbe sufficiente, anche se il testo non si legge, riuscire a
capire se è completa e sufficentemente centrata nel foglio.
Non faccio domande specifiche.
Se qualcuno potesse chiarirmi qualcuno dei problemi indicati mi farebbe un
favore.
Grazie e saluti, Sauro

         (o ancora 0 = user) ?
Ecco, usa vbTwips, sia con la Picture che con la Printer.
Stampa due linee (con .Line) e una scritta.
Cambia font per la scritta e ristampa.
Vedi anche proprietà CurrentX e CurrentY e funzioni ScaleWidth e
ScaleHeight.
A parte le stampe "incolonnate", come tabelle/griglie, ti risulterà chiaro
che l'uso dei caratteri a spazio fisso nella stampa dei moduli non è
assolutamente obbligato, anzi... ;-)

 Ecco, usa vbTwips, sia con la Picture che con la Printer.
Beh, trattandosi di fogli consiglierei di usare cm o mm anzichè i twips.
Il problema mi pare di capire si tratti comunque dell'approccio alla stampa
via spool anzichè via LPT diretta.
Windows gestisce la stampa come un'immagine (e non più come una serie di
caratteri) che deve prima essere tutta disegnata (spooling) e poi stampata,
senza preoccuparsi del "prima stampo questo, poi questo".
I posizionamenti te li devi fare a mano.
Lo strumento è più flessibile, ma senz'altro più complesso.
Inoltre non è più valida la teoria delle stampanti in emulazione epson-text,
poichè come dicevamo la stampa avviene graficamente e rischi di "bruciare"
la stampante ad aghi se non è predisposta.
Ciao.

 Beh, trattandosi di fogli consiglierei di usare cm o mm anzichè i twips.
Hai ragionissima, ma forse son partito (senza raccontarlo) dal fatto che io
preventivamente "disegno" graficamente i moduli (passando poi la struttura,
con sintassi convenzionale, alla procedura di stampa che la riproduce e la
"riempie" con i dati variabili) e, per avere una maggior precisione, adotto
un'unità di misura più "definita".