Ogni sistema, di qualunque tipo o dimensione, se usato per uso professionale, è corredato da una stampante. Questa periferica, infatti, è ormai diventata una componente imprescindibile di ogni ufficio. Per questo motivo, tutti i programmatori, almeno una volta nella vita, si trovano a dover scrivere del software in grado di gestirla. In particolare, coloro che sviluppano applicazioni gestionali non possono in genere esimersi dal prevedere la rappresentazione su carta delle informazioni elaborate o archiviate. Visual Basic nel tempo si è conquistato una posizione da leader nel campo degli strumenti di sviluppo per applicazioni gestionali. Ciò è dovuto anche alla semplicità e alla flessibilità con cui permette di produrre dei tabulati. Loggetto Printer In Visual Basic la stampante è rappresentata da un oggetto, denominato Printer. Tutte le operazioni devono pertanto essere eseguite su di esso. Lo scopo della lezione è di consentire al lettore di prendere confidenza con le proprietà e i metodi fondamentali che loggetto prevede. Il metodo Print Le stampanti sono nate con lo scopo di permettere la trasposizione su carta dei testi prodotti dal calcolatore. Loperazione elementare per questo tipo di periferiche è quindi rappresentata dalla scrittura di testo. Loggetto Printer a tal fine mette a disposizione il metodo denominato Print. Il suo utilizzo ricorda quello della parola chiave omonima del linguaggio Basic. Per scrivere una frase è quindi sufficiente invocare il metodo passandogli la stringa da stampare. Ad esempio, la riga Printer.Print "Io leggo Dev" provoca la scrittura della frase "Io leggo Dev" sulla stampante. Analogamente, le righe Printer.Print "Io leggo
Dev" provocano la scrittura delle frasi "Io leggo Dev" e "perché mi insegna a programmare". Esse sono poste su due righe differenti. Infatti, analogamente a ciò che avviene nel linguaggio Basic per il comando Print, alla fine della frase è generata automaticamente una sequenza costituita dai caratteri CR (Carriage Return, ovvero ritorno del carrello di stampa nella posizione di inizio riga) e LF (Line Feed, ovvero avanzamento di una riga). Ciò, tuttavia, a volte può risultare fastidioso, soprattutto quando si desidera comporre delle frasi a partire da informazioni calcolate dal programma in punti diversi. Per evitare che sia richiesto alla stampante di andare a capo, è necessario far seguire linvocazione del metodo Print dal punto e virgola. Le righe Printer.Print "Io leggo
Dev"; provocano pertanto la scrittura della frase Io leggo Devperché mi insegna a programmare Si noti che in questo caso non sono stati inseriti automaticamente degli spazi fra le parole "Dev" e "perché". È infatti cura del programmatore lintroduzione al termine di una stringa degli spazi tali da impedire che sia unita alla successiva quando ciò non è desiderato. Quindi, per scrivere la frase correttamente, è necessario aggiungere uno spazio al termine della prima stringa, come nelle righe che seguono: Printer.Print "Io leggo Dev
"; In alcuni casi, invece, può verificarsi la necessità di inserire delle righe vuote. Per fare ciò, è sufficiente richiamare il metodo Print senza parametri. Ad esempio, la riga Printer.Print fa sì che la testina della stampante si posizioni sulla riga successiva a quella corrente. Lincolonnamento dei dati Spesso, quando si stampano dei dati, si rivela necessario il loro incolonnamento. È il caso, ad esempio, dei documenti per uso fiscale. In questi casi, luso delle tabulazioni può rivelarsi molto utile. Esse permettono di suddividere il foglio in colonne, ognuna larga 14 caratteri. Visual Basic permette di gestire le tabulazioni per mezzo dellopzione Tab del comando Print. Ad esempio, le righe Printer.Print Tab(2); provocano la stampa della stringa
"Dev" nella seconda colonna del foglio. Si noti che il parametro numerico
descrive sempre una posizione assoluta. Quindi, il numero della colonna in cui la stampa
avviene è indipendente dalla posizione assunta dalla testina di stampa prima
dellesecuzione dellistruzione. Pertanto, le righe fanno sì che nella colonna successiva a
quella corrente sia scritta la parola "Dev". Linserimento di spazi Spesso, soprattutto quando si devono indicare degli importi in valuta, è opportuno allineare i testi a destra. Lincolonnamento per mezzo delle tabulazioni può in questi casi non rivelarsi una scelta corretta, dal momento che permette di allineare i testi a sinistra ma non agevola un granché lallineamento a destra. Può allora rivelarsi utile luso dellopzione Spc del metodo Print, che permette di stampare una sequenza di spazi in quantità pari al valore indicato come parametro. Calcolando opportunamente tale dato, è quindi possibile ottenere il corretto allineamento a destra del testo. Si osservi la procedura AllineaDestra di cui è riportato di seguito il codice sorgente: Private Sub AllineaDestra(ByVal
Stringa As String, ByVal LarghCol As Integer) Essa provvede a stampare la stringa fornitale come parametro dopo averla fatta seguire da spazi la cui quantità è espressa dalla variabile Spazi. Il suo valore è calcolato come differenza fra il numero della colonna in cui deve avvenire lallineamento, fornito come parametro (LarghCol) e la lunghezza della stringa da stampare. Si noti che tale procedura funziona correttamente solo se il carattere utilizzato è di tipo a spaziatura non proporzionale. In caso contrario, infatti, le larghezze dei caratteri, compresi gli spazi, risultano diverse fra loro e rendono molto più complesso lallineamento. Al fine di ridurre il rischio di errore derivante da un cattivo allineamento delle informazioni e di rendere più semplice e veloce lo sviluppo delle applicazioni, è pertanto consigliabile luso di un carattere a larghezza non proporzionale (ad esempio il "Courier New") nei programmi che prevedono la stampa di tabelle o altri dati su modulistica di tipo fiscale. Limpostazione del carattere da utilizzare Per selezionare un carattere diverso da quello predefinito, occorre intervenire sulla proprietà FontName delloggetto Printer. Ad esempio, la riga Printer.FontName = "Courier New" fa sì che la stampa sia eseguita con il carattere "Courier New". È inoltre possibile impostare la dimensione del font da utilizzare agendo sul valore della proprietà FontSize. Linsieme dei valori che essa può assumere è rappresentato dalle misure in punti che sono accettate dal sistema per il carattere selezionato. Per i font di tipo raster, i valori possibili sono pochi, mentre per i caratteri true type, che costituiscono la quasi totalità della dotazione di Windows, le dimensioni possono variare in un intervallo estremamente vasto. Pertanto, per impostare quello che i tipografi chiamano corpo del carattere, ovvero la sua dimensione, al valore corrispondente a 10 punti, occorre scrivere Printer.FontSize = 10 Anche lo stile del carattere può essere variato. Ciò avviene agendo su alcune proprietà in grado di assumere dei valori booleani. Ad esempio, la riga Printer.FontBold = True fa sì che il testo sia scritto in grassetto. La riga Printer.FontItalic = True seleziona invece lo stile corsivo. La sottolineatura è invece legata alla proprietà FontUnderline. Pertanto, può essere attivata mediante la riga Printer.FontUnderline = True Unaltra proprietà, in genere poco
usata, è quella che permette di generare delle stampe in cui il carattere risulta
barrato. Essa è denominata FontStrikethru. Printer.FontName =
"Arial" provocano la stampa della frase "Io leggo Dev" in Arial grassetto corsivo di corpo 20. Lutilizzo di più tipi di caratteri in un documento Le impostazioni relative al carattere sono attive per tutti i testi stampati dopo lassegnazione dei valori alle proprietà, fino a quando esse non subiscono variazioni. In altre parole, le impostazioni riguardanti il font non interessano lintero documento, a meno che non siano state definite prima della sua stampa. Inoltre, possono essere variate a piacere al suo interno. È quindi possibile usare un numero teoricamente infinito di caratteri diversi in ununica stampa. Si osservi lesempio che segue: Printer.FontName =
"Arial" Il testo prodotto è composto da 3 righe aventi dimensioni diverse. Lultima, inoltre, si differenza per lo stile, essendo scritta in corsivo. Il passaggio a una nuova pagina Molto spesso, le stampe che un programma deve produrre superano la capienza di una pagina. In questi casi, occorre inserire uno o più salti di pagina. Ciò è possibile invocando il metodo NewPage, senza argomenti, come illustrato di seguito: Printer.NewPage Lutilizzo di tale metodo provoca inoltre lincremento di ununità del valore della proprietà Page che, come è facile intuire, contiene il numero della pagina corrente. Si osservi la seguente procedura Private Sub PaginaSucc Essa ha lo scopo di provocare lavanzamento alla pagina successiva e di inserire nella parte superiore del nuovo foglio il numero di pagina. Lavvio della stampa Coloro che leggendo questo articolo hanno già provato a scrivere del codice volto a produrre una stampa, potrebbero aver subìto una delusione. Infatti, con molta probabilità, la stampante non ha prodotto alcun risultato. Ciò è dovuto al fatto che i documenti sono prima composti in memoria e solo in seguito inviati alla stampante. Ciò permette la massima flessibilità, nonché la possibilità di annullare una stampa già iniziata. Linvio di un documento alla stampante avviene quindi solo dopo la sua completa definizione, ovvero quando si provvede a dichiararne il completamento per mezzo del metodo EndDoc, da richiamare senza lausilio di parametri, come indicato di seguito: Printer.EndDoc Lannullamento di una stampa Come si è già accennato, è possibile annullare una stampa in corso di definizione. Per fare ciò, basta ricorrere al metodo KillDoc. Ad esempio, la riga Printer.KillDoc Un semplice esempio La lezione termina con un piccolo esempio. Si tratta di un semplice programma in grado di stampare una tavola pitagorica. Il suo codice, riportato nel listato 1, è tutto contenuto nella procedura Main, in quanto non necessita di uninterfaccia grafica. Esso si compone di due cicli nidificati. Uno è utilizzato per gestire le righe, mentre laltro mantiene traccia delle colonne. Il prodotto dei valori assunti dalle variabili di controllo dei cicli costituisce il dato da visualizzare nella tabella. Si noti che è calcolata la lunghezza del valore da scrivere, per consentire lanteposizione di un numero di spazi tale da ottenere lallineamento a destra dei dati. Bibliografia "Visual Basic 5", McGrawHill, ISBN 88-386-0436-3 Maurizio Crespi si occupa di grafica, multimedialità, amministrazione di reti locali e geografiche, nonché della progettazione e dello sviluppo di applicazioni in C++, Visual Basic, Delphi e Director. Può essere contattato tramite Internet allindirizzo mcrespi@infomedia.it. VB-IT: per tutti gli sviluppatori VB o aspiranti tali VB-IT è la mailing list italiana interamente dedicata a Visual Basic, VBA (Visual Basic for Application) e VBScript. Se sei uno sviluppatore esperto oppure ti interessa il mondo Visual Basic anche solo per diletto, troverai VB-IT utilissima! Consigli, suggerimenti, trucchi,
soluzioni a problemi comuni e molto altro. Per iscriversi, gratuitamente, a VB-IT è
sufficiente inviare un messaggio a majordomo@infomedia.it |