Il corso dedicato a Visual Basic da nuovamente spazio alla gestione della stampante. Questa volta saranno descritti i metodi che permettono di creare dei tabulati di alta qualità Corso di Visual Basic Nel corso degli anni, gli strumenti che permettono di stampare le informazioni su carta hanno subìto una notevole evoluzione. Dalle prime stampanti a margherita si è passati a quelle ad aghi, in grado di produrre anche della grafica e di operare con diversi tipi di carattere, fino poi ad arrivare alle moderne stampanti a tecnologia laser o a getto di inchiostro, che permettono di ottenere dei risultati di qualità un tempo di esclusiva competenza dei migliori tipografi. Levolversi delle periferiche ha portato ad un aumento delle esigenze dei programmatori. Dalla semplice rappresentazione di testi si è passati a un uso sempre più massiccio delle grafica, anche per le applicazioni di tutti i giorni. Per questo motivo, lo sviluppatore moderno necessita di uno strumento che gli permetta di gestire le stampanti anche per effettuare le operazioni più complesse. Ancora una volta Visual Basic non delude le aspettative, in quanto mette a disposizione una nutrita serie di metodi tali da rendere loggetto Printer, di cui si è già ampiamente parlato nella scorsa lezione, in grado di accontentare anche lutenza più esigente senza richiedere uno sforzo elevato al programmatore. La proprietà ScaleMode Per effettuare stampe di alta qualità, occorre dapprima essere in grado di posizionare i testi con estrema precisione in qualsiasi punto del foglio. Il concetto di "colonna", visto nella precedente lezione a proposito dellopzione Tab del metodo Print, non consente un controllo preciso della posizione in cui avviene la stampa, in quanto risulta legata alla dimensione del carattere. Per un posizionamento preciso allinterno del foglio è pertanto necessario disporre di uno strumento che permetta di esprimere delle coordinate in unità di misura semplici da usare e indipendenti dal carattere selezionato, quali sono ad esempio i millimetri. È ciò che la proprietà ScaleMode permette di fare. I valori più utilizzati per questa proprietà sono elencati nel riquadro 1. Per poter definire le coordinate degli elementi da posizionare sul foglio in centimetri, è quindi sufficiente inserire nel codice la riga Printer.ScaleMode = 7 Nella trattazione che segue si supporrà di aver selezionato come unità di misura i centimetri. La verifica delle dimensioni del foglio Per ottenere le dimensioni dellarea di stampa espresse nella scala impostata, è possibile ricorrere alle proprietà ScaleWidth e ScaleHeight. La prima restituisce la larghezza del foglio, mentre la seconda, ovviamente, laltezza. Esse si basano sulle impostazioni inserite nella finestra di configurazione della stampante nel Pannello di Controllo di Windows.Le righe che seguono stampano un messaggio indicante le dimensioni del foglio in uso. Printer.ScaleMode =
7 Le proprietà CurrentX e CurrentY Dopo aver definito una scala, è possibile stabilire la posizione in cui deve essere visualizzata la successiva riga di testo sul foglio. A tal fine, si fa uso delle proprietà CurrentX e CurrentY, che permettono di intervenire rispettivamente sulla coordinata orizzontale e su quella verticale. Ad esempio, si supponga di voler scrivere sul foglio a 4 centimetri dal bordo superiore e a 2,5 centimetri da quello laterale sinistro, la frase "Io leggo Dev". Il codice necessario per fare ciò è il seguente Printer.ScaleMode =
7 Le proprietà CurrentX e CurrentY si incrementano automaticamente. I loro valori riflettono pertanto sempre la posizione che è occupata dalla testina di stampa.Per mezzo delle suddette proprietà è anche possibile definire degli spostamenti relativi. Ad esempio, le righe seguenti spostano la testina di stampa a destra di 3 centimetri e in basso di 2 millimetri rispetto alla posizione corrente. Printer.CurrentX =
Printer.CurrentX + 3 Lallineamento di un testo a destra Si supponga di voler scrivere la frase "Io leggo Dev" a 2 centimetri dal bordo destro del foglio. Per fare ciò occorre calcolare la posizione iniziale in cui deve essere effettuata la scrittura. Essa è pari alla differenza fra la larghezza del foglio, a cui sono sottratti i 2 centimetri di margine, meno la lunghezza del testo. È quindi necessario disporre di uno strumento in grado di calcolare lingombro di una frase in base al carattere e allo stile selezionati ed esprimerlo nellunità di misura in uso. Il metodo TextWidth ha questo scopo. La sua sintassi è: <lunghezza> = Printer.TextWidth (<stringa>) Per scrivere la frase nella posizione desiderata occorre quindi digitare il seguente codice Testo = "Io
leggo Dev" La centratura di un testo Analogamente, è possibile centrare un testo nella pagina. A tal fine si fa ancora uso del metodo TextWidth, nonché delle proprietà ScaleWidth e CurrentX. Questa volta è necessario calcolare lo spazio che rimane libero nella riga, ovvero la differenza fra la larghezza del foglio e quella del testo da scrivere. Il valore ottenuto deve essere diviso per 2. È ciò che fa la procedura CentraTesto. Private Sub
CentraTesto(ByVal Testo As String) La scrittura di note a fine pagina In modo perfettamente analogo è possibile stabile lallineamento di un testo rispetto ai margini superiore e inferiore del foglio. In questo caso, è necessario tenere conto dellaltezza della stringa da stampare. Essa è calcolata dal metodo TextHeight, la cui sintassi è la seguente <altezza> = Printer.TextHeight (<stringa>) Si supponga di voler scrivere una procedura in grado di visualizzare delle note di fondo pagina in un carattere di corpo 8 a 2 centimetri dal margine inferiore del foglio. Il codice che la descrive è il seguente Private Sub
NoteFondo(ByVal Testo As String) La stampa in orizzontale o verticale Ormai tutte le stampanti moderne permettono di impostare lorientamento della stampa, ovvero di scegliere se utilizzare il foglio in modalità portrait (in verticale) o landscape (in orizzontale). Visual Basic offre il supporto per sfruttare questa caratteristica per mezzo della proprietà Orientation delloggetto Printer. I valori che essa può assumere sono due: il primo corrisponde alla costante vbPRORPortrait, che ha valore 1 e imposta la stampa in verticale, mentre il secondo, corrispondente alla costante vbPRORLandscape, permette di attivare la stampa in orizzontale. Il tracciamento di linee Sovente, al fine di delimitare delle tabelle o di dare un look più professionale ai propri documenti, si tracciano delle linee sul foglio. Visual Basic offre questa possibilità per mezzo del metodo Line, la cui sintassi è la seguente: Printer.Line <coord_inizio> - <coord_fine> dove le coordinate sono espresse da coppie di tipo (x,y), in cui x rappresenta la posizione orizzontale espressa nella scala in uso (indicata dalla proprietà ScaleMode) e y si riferisce alla posizione verticale. Pertanto, considerando sempre il valore della proprietà ScaleMode pari a 7, la riga Printer.Line (2,3) (19,3) provoca il tracciamento di una linea a 3 centimetri dal bordo superiore del documento che, in un comune foglio in formato A4 largo 21 centimetri, occupa lintera larghezza dellarea stampabile mantenendo un margine di 2 centimetri dai bordi. La prima delle coppie indicanti le coordinate può essere omessa. In questo caso è assunta come punto di partenza la posizione corrente della testina di stampa, ovvero la coppia (Printer.CurrentX, Printer.CurrentY) Ad esempio, la riga Printer.Line (19,3) provoca il tracciamento di una linea a partire dalla posizione corrente del cursore fino alla posizione distante 19 unità (centimetri, se la proprietà ScaleMode è impostata al valore 7) dal bordo sinistro del foglio e 3 unità da quello superiore. Lo spessore della linea dipende dal valore assegnato alla proprietà DrawWidth. Essa può assumere un valore interno fra 1 e 32767, che esprime il numero di pixel (punti) corrispondente allo spessore desiderato. Ad esempio, le righe
Printer.DrawWidth = 4 Printer.Line (2,3) (19,3)
fanno sì che sia disegnata una linea di spessore pari a 4 pixel. Unaltra proprietà, denominata DrawStyle, descrive il tipo di tratto della linea. I valori che essa può assumere sono elencati nel riquadro 2. Quelli compresi fra 1 e 4 hanno effetto solo se la proprietà DrawWidth è impostata a 1. Altrimenti, producono una linea continua, esattamente come quella determinata dalluso dellimpostazione predefinita, ovvero quella corrispondente alla costante vbSolid, che ha valore nullo. Si osservi il seguente codice:
Printer.ScaleMode = 7 Printer.DrawWidth = 1 Printer.Drawstyle = 1 Printer.Line (2,3) (19,3)
Esso provoca il tracciamento di una linea orizzontale tratteggiata a partire dalla posizione posta a 2 centimetri dal bordo sinistro del foglio fino alla posizione distante da esso 19 centimetri.
La stampa di immagini Tutte le stampanti presenti sul mercato sono ormai in grado di stampare anche delle immagini, spesso con una risoluzione grafica elevata. Naturalmente, Visual Basic mette a disposizione dei programmatori uno strumento che permette di sfruttare questa capacità. Si tratta del metodo PaintPicture, la cui sintassi è la seguente:
Printer.PaintPicture <immagine>, <x1>, <y1>, [<larghezza>], [<altezza>],
dove <immagine> rappresenta la sorgente dei dati da visualizzare, ovvero è la proprietà Picture di una PictureBox (oggetto atto a contenere immagini). I valori x1 e y1 rappresentano invece le coordinate del punto in cui deve essere posizionato langolo superiore sinistro dellimmagine. Ad esempio, si supponga di disporre di una PictureBox, denominata pbImg, in cui è contenuta unimmagine. Per riportare questultima su carta a partire dal punto di coordinate (2,3) è necessario scrivere la riga
Printer.PaintPicture pbImg.Picture, 2, 3
Limmagine è così disegnata in modo che la sua dimensione non sia alterata. Molto spesso, tuttavia, si desidera effettuare un ridimensionamento in fase di stampa. Ciò ha in genere il fine di sfruttare lintera area disponibile sul foglio, indipendentemente dalle dimensioni di questultimo. Ad esempio, si potrebbe voler stampare limmagine in modo da occupare tutto il foglio mantenendo un margine di 2 centimetri dai bordi. Ciò è possibile digitando il seguente codice: Printer.ScaleMode =
7 Si noti che sono stati utilizzati due ulteriori parametri che descrivono, rispettivamente, la larghezza e laltezza dellimmagine da stampare. Si osservi altresì che ad essi sono stati assegnati dei valori pari alle dimensioni del foglio diminuite di 4 centimetri, al fine di generare i margini. La scelta fra la stampa a colori o in bianco e nero Le stampanti a colori, dato il continuo ridursi dei prezzi, si stanno sempre più diffondendo. La stampa a colori comporta tuttavia un costo per pagina più elevato rispetto a quella monocromatica a toni di grigio. Per questo motivo, spesso si rivela utile fare in modo che le applicazioni siano in grado di operare una scelta fra le due modalità di stampa. Ciò è possibile per mezzo della proprietà ColorMode, che può assumere i valori 1 (corrispondente alla costante predefinita vbPRCMMonochrome) e 2. Lassegnamento di questultimo valore, a cui si può far riferimento anche attraverso la costante vbPRCMColor, fa sì che la stampa avvenga a colori. In caso contrario è monocromatica. Tale proprietà è ignorata nel caso in cui la stampante in uso sia in grado di produrre solo dei tabulati monocromatici.
Conclusioni La capacità di produrre un risultato di qualità non solo sul video ma anche sulla stampante è sempre più richiesta dallutenza moderna, che sembra accettare sempre di meno i tabulati grezzi e spesso poco leggibili che un tempo costituivano lo standard per le applicazioni gestionali. Oggi le esigenze sono cambiate e con esse le periferiche in grado di stampare le immagini. Oggi un programmatore deve essere in grado di creare delle applicazioni che visualizzino nel migliore dei modi i risultati delle proprie elaborazioni, ricorrendo a quanto di meglio la tecnologia mette a disposizione. Un moderno strumento di sviluppo deve quindi tenere conto di queste esigenze. Visual Basic fin dalla nascita si è affermato come uno dei prodotti più innovativi. Anche per quanto riguarda la gestione delle stampe è allaltezza della propria fama, rivelandosi in grado di soddisfare le richieste dellutenza più esigente, pur mantenendo la consueta semplicità duso che rappresenta il suo fiore allocchiello. 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.
|