Come avrete capito questa volta i nostri articoli sono dedicati alla stampa in VB, ovvero all’oggetto Printer
Quante stampanti hai?
La risposta è in Printers.Count, ovvero la proprietà Count tipica di ogni insieme, e come tutti gli oggetti di Jet (ricordate?) derivata dalla enumerazione di cui gli insiemi sono dotati
Comunque, andiamo con ordine
Sappiate che Printers è un insieme di oggetti Printer, ove ogni elemento è una stampante installata nel sistema
Ma Printers non è solo .Count, esso è anche ottimo quando il problema è
Quale stampante uso?
Facile, Printers(n) ove n è un numero da 0 a Printers.Count-1, -1 poiché Printers.Count=7 sta ad affermare che gli indici utili sono 0,1,2,3,4,5,6
Facile questo, meno facile capire come usare questa possibilità
La soluzione anche qui è facile, basta usare un oggetto Printer e un For
Dim myPrn As Printer
Dim n%
For n%=0 to Printers.Count-1
myPrn=Printers(n%)
‘ Eventuali verifiche di proprietà della stampante
Printer=myPrn
Next n%
Se avete letto il codice avrete capito cosa facciamo, forse meno chiaro è l’assegnamento di myPrn a Printer, vi starete chiedendo...
Chi ha dichiarato Printer? Io no!
E infatti voi siete innocenti, la "colpa" è di VB il quale ha preparato la seguente dichiarazione all’avvio dell’IDE
Dim Printer As Printer
Sembra strano ed infatti lo è, poichè il vero Printer è una struttura C che usa l’API in modo diretto e che VB ci presenta con il falso nome di Printer, tant’è che la mia dichiarazione era solo utile per chiarci le idee, poichè la dichiarazione C potrebbe rassomigliare a
PRINTER_STRUCT printer;
sulla quale poi chiamare le API di stampa che noi usiamo come metodi e proprietà di Printer
Molti si chiederanno quali siano questi metodi
Print? Print!
Print, quel metodo che ci ha rallegrato quando conoscevamo solo il controllo Timer e volevamo creare un orologio torna sotto altra dichiarazione
Form.print?
Printer.print?
Chi ha detto Form.print è pregato di cambiare pagina, chi ha detto Printer.Print può restare
Ebbene si, anche Printer ha il suo bravo .Print, che stampa sulla Printer predefinita (non è uno scioglilingua)
E’ solo che coloro che si limitano a Print
Pertanto entriamo in argomento
Ancora enumerazioni? Printers(x).Fonts(y) cosa vuol dire?
A questo punto è necessario un piccolo richiamo sulle stampanti
Ogni stampante è in grado di supportare un certo numero di colori, ma anche dei certi font e non altri, l’insieme Fonts dell’oggetto Printer contiene tutti i font supportati dalla stampante, ovvio che se l’insieme contiene Arial noi potremo usare Arial Grassetto Arial Corsivo Arial Sottolineato Arial Corsivo Grassetto Sottolineato Arial Grassetto Corsivo Arial Corsivo Sottolineato Arial Grassetto Sottolineato Arial Normale
Tutta questa sfilza di combinazione di stili Arial sono solo la dimostrazione del concetto, ricordate però che gli stili si chiamano
e che essi sono proprietà booleane dell’oggetto Font, per ottenere un font Bold+Underlined basta
fnt.Bold=True
fnt.Underlined=True
Questo font è stato stampato con gli stili Grassetto(Bold) e Sottolineato(Underlined)
Ma adesso passiamo dall’insieme Fonts all’oggetto Font in questione, come dire alla stampante di stampare con questo stile?
Stile Courier New Grassetto e Corsivo
Courier New Style Bold and Italic
Scusate per la traduzione in inglese, ma serve solo per memorizzare i nomi inglesi degli stili
Esistono 2 modi
Metodo 1.Settare le proprietà Fontnomestile dell’oggetto Printer
La nostra stampante è dotata di proprietà
Per ottenere Courier New a 12 punti Grassetto e Corsivo ci serve
1 Printer.FontName="Courier New"
2 Printer.FontSize=12
3 Printer.FontBold=True
4 Printer.FontItalic=True
5 Printer.FontUnderline=False ‘Se è la prima volta che usate Printer ‘o siete sicuri di non aver mai usato il font Sottolineato potete ‘omettere questa linea
Dicendo che prima il font fosse Times New Roman a 20 pixel Sottolineato ecco cosa otteremo
Linea 1
Linea 2
Linea 3
Linea 4
Linea 5
Metodo 2.Usare Printer.Font.nomestile
Esaminiamo l’oggetto Font
Gia conoscete queste proprietà, è solo che prima le avete viste introdotte dal prefisso Font, vediamo cosa succederebbe usando Printer.Font.proprietà invece di Printer.Fontproprietà
Per ottenere Courier New a 12 punti Grassetto e Corsivo ci serve
1 Printer.Font.Name="Courier New"
2 Printer.Font.Size=12
3 Printer.Font.Bold=True
4 Printer.Font.Italic=True
5 Printer.Font.Underline=False ‘Se è la prima volta che usate ‘Printer o siete sicuri di non aver mai usato il font Sottolineato ‘potete omettere questa linea
Dicendo che prima il font fosse Times New Roman a 20 pixel Sottolineato ecco cosa otteremo
Linea 1
Linea 2
Linea 3
Linea 4
Linea 5
Se volete eccovi un trucco
Trucco per convertire dal 1° al 2° metodo il codice utilizzato
Tra Font e nomeproprietà mettete un punto
Così
FontBold diventa Font.Bold
FontName diventa Font.Name
Adesso credo che Printers(x).Fonts(y) sia chiaro, è l’elemento y dell’insieme Fonts dell’elemento x dell’insieme Printers...lungo ma facile
Adesso credo ne sappiate abbastanza per sapere che Font è un oggetto e che una variabile di tipo Font può esistere, come una di tipo Printer, ma...attenti
Quando voleste aggiungere una stampante al sistema in VB non provate a scrivere
Dim myPrinter As New Printer ‘Mai!
Il Dio dei Compilatori protesterebbe poichè un oggetto di classe Printer non può essere creato con l’operatore New, ma per assegnamento
Scusate la terminologia che chiarisco subito
Un oggetto di classe Printer è una variabile di tipo di dati Printer
non può essere creato con l’operatore New vuol dire che un oggetto Printer non è instanziabile
ma per assegnamento vuol dire che possiamo crearlo dandogli il valore di un oggetto di tipo equivalente ( operatore = usato come oggetto=altroggetto per chiarirci )
Saluti e stampe
Per questa volta abbiamo concluso la stampa, la prossima volta portate una cartuccia nuova perchè stamperemo le prime immagini...
Buon divertimento!