3...2...1...Stampiamo!
Enrico Granata  atgrana@tin.it
Seconda parte

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

  1. Non potranno usare grafica
  2. Non potranno cambiare font

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

  1. Bold
  2. Italic
  3. Underlined

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à

  1. Proprietà FontBold Grassetto
  2. Proprietà FontItalic Corsivo
  3. Proprietà FontName Nome del font (Arial , Courier , Ms Serif)
  4. Proprietà FontSize Dimensione del font (14, 10, 16 )
  5. Proprietà FontUnderline Sottolineato

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

  1. Proprietà Bold
  2. Proprietà Italic
  3. Proprietà Name
  4. Proprietà Size
  5. Proprietà Underline

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!