Infatti con tale "stampante" l'oggetto Printer di Visual Basic restituisce un run-time error 380 (valore di proprietà non valido) nel caso vogliate stampare in Orizzontale (Landscape).
L'unico orientamento possibile accettato da MODI Writer è infatti vbPRORPortrait (= 1).
Ho effettuato una ricerca con Google, ma su molti blog e/o forum non si diceva altro che "Mostra la finestra di dialogo della stampante e fai cambiare all'utente l'impostazione di orientamento" o cose del genere.
Per ovviare a questo problema ho aggiunto una routine di gestione dell'errore che anziché cambiare l'orientamento della pagina, cambia le dimensioni del foglio:
Private Sub setOrientation(Optional myOrientation As Integer = vbPRORPortrait)
On error goto or_error
Const usrPRDWA4 = 11907
Const usrPRDHA4 = 16839.9
Printer.Orientation = myOrientation
Exit Sub
or_error:
Printer.PaperSize = vbPRPSUser
If myOrientation = vbPRORLandscape Then
Printer.Height = usrPRDWA4
Printer.Width = usrPRDHA4
Else
Printer.Height = usrPRDHA4
Printer.Width = usrPRDWA4
End If
Resume Next
End Sub
Ovviamente il cambio di dimensioni del foglio avviene solo se va in errore l'assegnamento dell'attributo Orientation dell'oggetto Printer. Quindi su una stampante "normale" non dovrebbe mai accadere.
Le dimensioni che vengono impostate sono le dimensioni di un foglio A4 convertite in Twips. Infatti 1 cm = 567 Twips, quindi i 21 cm di larghezza del foglio A4 diventano 11907 Twips.
A seconda delle vostre esigenze impostate anche dimensioni differenti, ma credo che anche voi come me abbiate in casa solo fogli A4. Se avete qualche idea migliore scrivetemi o lasciatemi un commento a questo post!
Nessun commento:
Posta un commento