Stampa - Esempi E Documentazione Sulle Stampe




Stampe # Esempio di commondialog e stampa n. … copie
Private Sub Command1_Click ()
Dim BeginPage, EndPage, NumCopies, i
' Imposta Annulla su True.

CommonDialog1.CancelError = True
On Error GoTo ErrHandler
' Visualizza la finestra di dialogo Stampa.

CommonDialog1.ShowPrinter
' Recupera i valori selezionati dall'utente

' dalla finestra.

BeginPage= CommonDialog1.FromPage
EndPage = CommonDialog1.ToPage
NumCopies= CommonDialog1.Copies
For i = 1 To NumCopies
' Inserire il codice per l'invio di dati alla

' stampante.

Next
Exit Sub
ErrHandler:
' L'utente ha scelto il pulsante Annulla.

Exit Sub
End Sub

Qualita' di stampa
Non e' possibile modificare alcuna proprieta' all'interno di una pagina dopo aver impostato una proprieta'. Se si modificano le proprieta', le impostazioni verranno applicate solo alle pagine successive e non a quella cor-rente. Le istruzioni riportate di seguito illustrano come sia possibile stampare ciascuna pagina con una di-versa qualita' di stampa:
For pageno = 1 To 4
Printer.PrintQuality = -1 * pageno
Printer.Print "La qualita' di questa pagina e'"; pageno
Printer.NewPage
Next
I valori della qualita' di stampa sono compresi tra – 4 e – 1 oppure sono numeri interi positivi corrispondenti alla risoluzione di stampa espressa In punti per pollice (DPI). Il codice riportato di seguito, ad esempio, im-posta la risoluzione di stampa su 300 DPI:
Printer.PrintQuality = 300
Posizionamento di testo e grafica
Le proprieta' CurrentX e CurrentY dell'oggetto Printer vengono impostate esattamente come per form e ca-selle immagine. Con l'oggetto Printer, queste proprieta' determinano il punto in cui stampare l'output sulla pagina corrente. Le istruzioni riportate di seguito impostano le coordinate corrispondenti all'angolo superiore sinistro della pagina corrente:
Printer.CurrentX = 0
Printer.CurrentY = 0
Stampa del contenuto dell'oggetto Printer
Dopo aver inserito testo e grafica nell'oggetto Printer, e' possibile stamparne il contenuto utilizzando il meto-do EndDoc che fa avanzare la pagina e invia l'output in sospeso allo spooler. Uno spooler intercetta un pro-cesso di stampa prima che questo arrivi alla stampante, quindi lo invia a una unita' disco o alla memoria del sistema, dove viene conservato fino a quando la stampante non e' pronta per elaborarlo. Ad esempio:
Printer.Print "Questa e' la prima riga di testo in una _
serie di due."
Printer.Print "Questa e' la seconda riga di testo in _
una serie di due."
Printer.EndDoc
Nota Se l'applicazione viene chiusa senza che EndDoc sia stato richiamato in modo esplicito, il metodo verra' richiamato automaticamente.
Creazione di documenti a pagine multiple
Quando si stampano documenti di grandi dimensioni, e' possibile utilizzare il metodo NewPage nel codice per specificare il punto di inizio di una nuova pagina. Ad esempio:
Printer.Print "Questa e' pagina 1."
Printer.NewPage
Printer.Print "Questa e' pagina 2."
Printer.EndDoc
Annullamento di un processo di stampa
Il metodo KillDoc consente di interrompere il processo di stampa corrente. È possibile, ad esempio, visualiz-zare una finestra di dialogo In cui viene richiesto se si desidera stampare il documento o interrompere il pro-cesso di stampa:
Sub PrintOrNot()
Printer.Print "Questa e' la prima riga per_
illustrare il metodo KillDoc"
Printer.Print "Questa e' la seconda riga per _
illustrare il metodo KillDoc"
Printer.Print "Questa e' la terza riga per _
illustrare il metodo KillDoc"
If vbNo = MsgBox("Stampare questo documento?", _
vbYesNo) Then
Printer.KillDoc
Else
Printer.EndDoc
End If
End Sub

Se Print Manager del sistema operativo sta elaborando il processo di stampa, il metodo KillDoc elimina l'in-tero processo inviato alla stampante. In caso contrario, la prima pagina potrebbe gia' essere stata inviata alla stampante e il metodo KillDoc non avra' quindi alcun effetto. La quantita' di dati inviati alla stampante varia leggermente in base ai driver della stampante.
Nota Non e' possibile utilizzare il metodo KillDoc per interrompere un processo di stampa inizializzato con il metodo PrintForm.
I metodi TextHeight e TextWidth
I metodi TextHeight e TextWidth possono essere utilizzati prima del metodo Print per stabilire la posizione da impostare nelle proprieta' CurrentX e CurrentY. TextHeight restituisce l'altezza di una riga di testo, tenen-do conto dello stile e delle dimensioni del carattere dell'oggetto. La sintassi di questo metodo e' la seguente:
[oggetto.]TextHeight(stringa)
Se l'argomento stringa include caratteri di ritorno a capo incorporati (Chr(13)), il testo e' disposto su piu' righe e TextHeight restituisce l'altezza totale di tutte le righe del testo contenute nella stringa. In caso contrario, TextHeight restituisce sempre l'altezza di una sola riga.
Il metodo TextHeight puo' essere utilizzato per impostare la proprieta' CurrentY su una determinata riga. Ad esempio, le istruzioni riportate di seguito impostano le coordinate corrispondenti all'inizio della quinta riga:
CurrentY = TextHeight("esempio") * 4
CurrentX = 0
Se nel testo di esempio non ci sono caratteri di ritorno a capo, e' necessario utilizzare la sintassi riportata di seguito, che imposta CurrentY sull'ennesima riga:
CurrentY = [oggetto.]TextHeight(stringa) * (n – 1)
Se si omette oggetto, che puo' essere un form, una casella immagine o l'oggetto Printer, il metodo verra' ap-plicato al form corrente.
Il metodo TextWidth restituisce la larghezza di una stringa, tenendo conto dello stile e delle dimensioni del carattere dell'oggetto. Questo metodo risulta particolarmente utile nel caso di caratteri proporzionali e con-sente di stabilire se la larghezza di una stringa e' maggiore di quella del form, della casella immagine o del-l'oggetto Printer.
Le istruzioni di seguito riportate, ad esempio, utilizzano TextWidth e TextHeight per centrare il testo In una casella posizionando CurrentX e CurrentY. In questo caso il nome della casella e' Buono pasto.
CurrentX = (BoxWidth - TextWidth("Buono pasto")) / 2
CurrentY = (Boxheight - TextHeight("Buono pasto")) / 2
Durante la stampa possono verificarsi errori di run-time intercettabili. Nella tabella che segue sono elencati alcuni esempi di errori che possono essere visualizzati:
Numero di errore Messaggio di errore
396 Impossibile impostare la proprieta' all'interno di una pagina.
Questo errore viene generato quando la stessa proprieta' viene impostata In modo diverso per una me-desima pagina.
482 Errore della stampante.
Questo errore viene riportato quando il driver della stampante restituisce un codice di errore.
483 Il driver della stampante non supporta la proprieta' specificata.
Questo errore viene generato quando si tenta di utilizzare una proprieta' non supportata dal driver della stampante corrente.
484 Periferica non disponibile.
Questo errore viene generato quando le informazioni relative alla stampante nel file Win.ini mancano o sono insufficienti.
Nota Gli errori della stampante non sempre vengono generati immediatamente. Se sono causati da un'istruzione, l'errore potrebbe essere generato solo quando viene eseguita la successiva istruzione che fa riferimento alla stampante in uso.
Esempio di ENDDOC
In questo esempio il metodo EndDoc viene utilizzato per terminare un documento dopo averne stampate due pagine, ciascuna delle quali presenta una riga di testo allineata al centro indicante il numero di pagina. Per eseguire questo codice di esempio, incollarlo nella sezione Dichiarazioni di un form, quindi premere F5 e fare clic sul form.
Private Sub Form_Click ()
Dim HWidth, HHeight, I, Msg' Dichiara le variabili.
On Error GoTo ErrorHandler' Imposta la gestione
' degli errori.

Msg = "Pagina stampata"
For I = 1 To 2' Imposta due operazioni
' ripetute.

Width = Printer.TextWidth(Msg) / 2 ' Calcola meta' larghezza.
HHeight = Printer.TextHeight(Msg) /2 ' Calcola meta' altezza.
Printer.CurrentX = Printer.ScaleWidth / 2 - HWidth
Printer.CurrentY = Printer.ScaleHeight / 2 - HHeight
Printer.Print Msg & Printer.Page & "." ' Stampa.
Printer.NewPage ' Invia la nuova pagina.
Next I
Printer.EndDoc ' La stampa e' terminata.
Msg = "Due pagine, con una riga di testo allineata al centro, "
Msg = Msg & "sono state inviate alla stampante."
MsgBox Msg' Visualizza il messaggio.
Exit Sub
ErrorHandler:
MsgBox "Problema di stampa nella stampante utilizzata."
Exit Sub
End Sub

Esempio di killDOC
In questo esempio il metodo KillDoc viene utilizzato per interrompere il processo di stampa corrente. Per eseguire questo codice di esempio, incollarlo nella sezione Dichiarazioni di un form, quindi premere F5 e fare clic sul form.
Private Sub Form_Click()
For i = 1 To 40
Printer.CurrentX = 1440' Imposta il margine sinistro.
Printer.CurrentY = (i * 300)' Avanza fino alla riga
' successiva.

Printer.Print "Riga " & Str$(i) & "di testo."
On Error Resume Next' Rileva gli errori della
' stampante.

If i = 26 Then
printer.KillDoc' Interrompe il processo di stampa.
Printer.EndDoc
End
End If
Next i
End Sub

Gli elementi visualizzati o stampati possono comprendere valori di proprieta', costanti e variabili, sia di tipo stringa che numeriche. Il metodo Print descritto In "Visualizzazione di testo in form e caselle immagine", consente di stampare il valore di voci numeriche. I valori positivi sono preceduti o seguiti da uno spazio, mentre quelli negativi sono preceduti dal segno meno.
Le varie voci devono essere separate da un punto e virgola (;) o da una virgola (,). Se si utilizza il punto e virgola, le varie voci verranno stampate In successione una dopo l'altra senza alcuno spazio, mentre se si utilizza la virgola, ciascuna voce verra' stampata nella colonna successiva.
L'istruzione che segue, ad esempio, stampa il testo nel form corrente:
Print "Il valore di X e' "; X; "ed il valore di Y _
e' "; Y
Se X e' uguale a 2 e Y e' uguale a 7, l'istruzione genera l'output seguente:
Il valore di X e' 2 ed il valore di Y e' 7
Per impostazione predefinita, ogni singolo metodo Print stampa il testo e si sposta quindi sulla riga succes-siva. Se non ci sono voci, Print passa alla riga successiva. Piu' istruzioni Print generano automaticamente l'output su righe separate, come nel caso della casella immagine picLineCount dell'esempio seguente:
picLineCount.Print "Questa e' la riga 1."
picLineCount.Print "Questa e' la riga 2."
Inserendo un punto e virgola o una virgola tra due istruzioni Print, tuttavia, l'output della seconda istruzione verra' stampato sulla stessa riga in cui viene stampato l'output della prima:
picLineCount.Print "Questo verra' visualizzato";
picLineCount.Print "sulla stessa riga."










( stampaesempiedocumentazionesullestampe.html )- by Paolo Puglisi - Modifica del 17/12/2023