Stavolta ci accingiamo alla fine della serie
Ne sappiamo abbastanza per completare la nostra knowledge base sulle stampanti in VB
Talvolta ci siamo spinti un po' oltre le semplici caratteristiche di VB per spaziare nella matematica e nell’hardware, anche stavolta sarà così
Questo mese studieremo infatti le proprietà più nascoste di Printer
Ignoriamo Windows
Se TrackDefault è True la nostra stampante può adattarsi alle impostazioni nel Pannello di Controllo di Windows, se è False invece rimane sempre la stessa
Io personalmente consiglio sempre di tenerla True, ma siamo in democrazia
Osserviamo il seguente esempio
Printer.TrackDefault=False
1 Printer.Print "......."
Goto 1
Mentre stampa andiamo nel Pannello di Controllo e mutiamo la Port della nostra Printer e...
miracolo, VB non stampa più, o addirittura genera errore
Perchè?
Perchè non ha aggiornato la sua Printer, ma neanche ha smesso di stampare...ragion per cui il Driver protesta vivacemente o ( di solito ) invia dati ad una porta che li rifiuta ( quale seriale o parallela conosce PostScript? )
hDC, questo sconosciuto
Questa proprietà la useremo di rado ed è molto API, per cui riporto ( senza modifiche ) il testo della guida di VB
Restituisce un handle fornito nell'ambiente operativo Microsoft Windows al contesto di periferica di un oggetto.
Sintassi
oggetto.hDC
Osservazioni
Questa proprietà è un handle del contesto di periferica dell'ambiente operativo Windows. Nell'ambiente operativo Windows la visualizzazione di sistema viene gestita tramite l'assegnazione di un contesto di periferica per l'oggetto Printer e per ciascun form e ciascun controllo PictureBox dell'applicazione. È possibile utilizzare la proprietà hDC per fare riferimento all'handle per il contesto di periferica di un oggetto. Verrà fornito un valore da passare alle chiamate API di Windows.
Nel caso di un controllo CommonDialog, questa proprietà restituisce un contesto di periferica per la stampante selezionata nella finestra di dialogo Stampa quando è impostato il flag cdlReturnDC oppure un contesto informativo quando è impostato il flag cdlReturnIC.
Nota È possibile che il valore della proprietà hDC cambi durante l'esecuzione di un programma. Si consiglia quindi di non archiviare il valore in una variabile, ma di utilizzare la proprietà hDC quando necessario.
È possibile che la proprietà AutoRedraw modifichi l'impostazione della proprietà hDC. Se AutoRedraw è impostata su True per un form o per un contenitore PictureBox, hDC funzionerà come un handle per il contesto di periferica dell'immagine grafica fissa (equivale alla proprietà Image). Se AutoRedraw è False, hDC sarà il valore effettivo di hDC della finestra Form o del contenitore PictureBox. È possibile che l'impostazione della proprietà hDC cambi durante l'esecuzione del programma indipendentemente dall'impostazione di AutoRedraw.
Una volta comprata la cartuccia mi manca la carta, se sapessi dove cercarla...
userei la proprietà PaperBin, che indica la locazione del vassoio per la carta, i suoi valori sono i seguenti
Nome costante |
Valore numerico |
Spiegazione |
vbPRBNUpper |
1 |
Cassetto superiore |
vbPRBNLower |
2 |
Cassetto inferiore |
vbPRBNMiddle |
3 |
Cassetto centrale |
vbPRBNManual |
4 |
Inserimento manuale |
vbPRBNEnvelope |
5 |
Alimentatore buste |
vbPRBNEnvManual |
6 |
Alimentatore buste con inserimento manuale |
vbPRBNAuto |
7 |
Cassetto predefinito (default) |
vbPRBNTractor |
8 |
Alimentatore modulo |
vbPRBNSmallFmt |
9 |
Alimentatore piccolo |
vbPRBNLargeFmt |
10 |
Alimentatore grande |
vbPRBNLargeCapacity |
11 |
Alimentatore a grande capacità |
vbPRBNCassette |
14 |
Cassetto di alimentazione |
E’ molto probabile che come finirete questo articolo PaperBin sarà dimenticata, ma se qualche volta doveste attingere carta da un luogo preciso ricordatevene
I use my port ( Io uso la mia porta ( seriale o parallela ) )
Proviamo a scrivere un programma per informare l’utente circa le stampanti del suo PC e che stampi una tabella di Word con tutti i valori
Cosa metteremmo per prima voce nella tabella?
Il nome della periferica, e poi subito la porta
La porta, questa illustre conosciuta
Il mio PC
La mia stampante
Come mettere in collegamento queste due entità?
Con una porta
LPT1 Il mio PC
La mia stampante
Questo schema mostra la connessione tra "Il mio PC" e "La mia stampante" tramite LPT1, la famosissima porta LPT1
Quello che fa Printer.Port è proprio questo, dirci a quale porta è collegata la nostra stampante
Sul mio PC ad esempio otterei quanto segue
Nome periferica |
Porta della periferica |
Epson Stylus Color 600 |
LPT1 |
Fax/Modem COMPAQ |
COM2 |
La prima stampante è la mia stampante di default, la seconda è il FAX/MODEM che la COMPAQ fornisce con i Presario 5220 e che Windows vede come una stampante su COM2, solo che provando ad inviare la nostra grafica a Fax/Modem COMPAQ ci troveremmo nei guai, esso è in realtà un Modem, per cui state attenti nella scelta della stampante, o, meglio, lasciate scegliere ai vostri utenti
Legale, Lettera, A4, cm 2 x cm5
Non stiamo dando le lettere, ma adesso parliamo di Printer.Height e Printer.Width
Queste due proprietà impostano le dimensioni del foglio di carta della stampante
Come usarle?
‘ Stampiamo Buste
Printer.Height=CInt(InputBox("Quanto è alta la busta?")) Printer.Width=CInt(InputBox("Quanto è larga la busta?"))
Printer.CurrentX=Printer.Height/2
Printer.CurrentY=Printer.Width/2
Printer.Print "Mittente:"
Printer.Print " Enrico Granata"
Printer.Print VbCrLf + " Via *** **"
Printer.Print VbCrLf + " ***, Napoli"
(L’indirizzo è chiaramente omesso, ma poco ce ne importa)
Di solito Printer.Height e Printer.Width sono settate sui valori di default, ma talvolta possiamo tentare una modifica, specialmente se in riduzione del valore, le maggiorazioni NON sono consigliate, ioProgrammatore avvisato mezzo salvato
Attenzione: il seguente driver IOPROGDRV associato alla stampante "ioProgrammo" non è valido
Talvolta può capitarci di aver bisogno del nome del driver e non di quello della periferica, in questo caso raro ma non troppo Printer.DriverName ritorna una stringa contenente tale valore
Cosa ben più usuale è desiderare il nome della stampante che viene ritornato da Printer.DeviceName
Type MyPrinter
Device As String
Driver As String
End Type
Dim CurPrinter As MyPrinter
CurPrinter.Device=Printer.DeviceName
CurPrinter.Driver=Printer.DriverName
Questo codice crea un tipo MyPrinter contenente nome del Device e del Driver per una Printer
L’oggetto CurPrinter è la stampante di default per MyPrinter ed infatti lo inizializziamo a Printer
Carta esaurita!!!
Quante volte l’importantissima dichiarazione dei redditi non può essere stampata perchè ci manca la carta?
Tante, troppe deve aver pensato Gates che ha previsto Printer.Page
Questo intero ritorna le pagine finora stampate del documento corrente
Se ad esempio sappiamo che sono 20 pagine da stampare useremo così una ProgressBar
prg.Max=20
prg.Min=0
1 prg.Value=Printer.Page
...
Printer.NewPage
Goto 1
Ultimo accenno
Un brevissimo accenno prima di chiudere ( domani è la Vigilia di Natale ) a certi metodi quali Line, Circle e Pset che conosciamo sotto altra forma, ma che valgono anche per Printer
Printer.Line Step (x1, y1) - Step (x2, y2), colore, BF
Printer.Circle Step (x, y), raggio, colore, inizio, fine, aspetto
Printer.PSet Step (x, y), colore
Queste sintassi tratte dalla guida di VB vi dovrebbero essere tanto familiari da non necessitare di spiegazioni ulterori, la prima è una linea, la seconda un cerchio, la terza un punto
Tenete conto dello spazio disponibile sulla pagina, specialmente prima di Circle per evitare di ottenere un oggetto diviso in 2 pagine ( cosa non possibile per PSet )
Ancora una volta ciao
Anche questa serie in 3 articoli sulla stampa si è conclusa
Abbiamo iniziato con i metodi fondamentali per concludere con le proprietà meno usate, ma sempre utili
Vi ricordo che la guida del linguaggio è sempre la prima fonte di informazioni per ciò di cui non abbiamo parlato
Ciao!!!