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." |