Module de classe PPrinter
Déchargement :
Je le dis clairement : je n'aime pas
l'objet "Printer" de VB.
Son principal défaut, selon moi, est qu'on n'a pas vraiment accès aux réglages
du driver de l'imprimante. On peut afficher le dialogue du driver et régler les
paramètres (qualité d'impression, couleur ou N/B, correction des teintes,
qualité du papier, ...), mais ces réglages ne sont pas pris en compte lors de
l'impression.
Voici un module de classe, intitulé
"PPrinter" qui peut le remplacer avantageusement. Le module PPRINTER prend en compte tous les réglages personnalisés de l'impression,
y compris les réglages non standards spécifiques à un modèle particulier
d'imprimante. De plus, PPrinter contient la procédure du dialogue du
choix d'imprimante, ce qui rend inutile l'usage de CommonDialog de VB
Le module PPrinter comprend :
1) le module de classe "PPRINTER"
2) le form "FormPrinterName"
Ces 2 éléments doivent être importés ou recopiés dans le projet VB.
Méthodes et propriétés de l'objet PPRINTER |
Les noms des méthodes et propriétés sont dans l'ensemble
similaires à celles de l'objet PRINTER de VB. Mais, certains mots étant réservés par VB, il n'a pas été toujours
possible de conserver exactement les mêmes appellations. Dans ce cas, un "P" comme "Perso" a été ajouté comme préfixe.
Ainsi PRINT de l'objet Printer devient à PPRINT ("P" pour "Perso") et le module s'appelle PPRINTER (= Personal
Printer)
Les 2 procédures les plus difficiles à écrire ont été : PaintPicture,
et PrintDialog.
PROPRIÉTÉS (sans argument) DE L'OBJET PPRINTER |
- CurrentX As Long
- CurrentY As Long
- DeviceName As String (lecture seule)
- DrawColor As Long
- DrawMode As Long
- DrawStyle As Long
- DrawWidth As Long
- FillColor As Long
- FillHatch As Long (Définit la trame, ignoré si FillStyle est vbSolid ou vbTransparent)
- FillStyle As Long
- FontBold As Boolean
- FontName As String
- FontSize As Long (hauteur de la police exprimée en unités logiques)
- FontTransparent As Long
- ForeColor As Long
- hdc As Long (Handle du device context, lecture seule)
- IsPrinter As Boolean (sert à contrôler que le DC a été correctement créé, lecture seule)
- OffsetX As Long (bande non imprimable de gauche exprimée en unités logiques, lect. seule)
- OffsetY As Long (bande non imprimable du haut exprimée en unités logiques, lect. seule)
- PageCenterX As Long (abcisse du centre géographique de la page (en UL), lect. seule)
- PageCenterY As Long (ordonnée du centre géographique de la page (en UL), lect. seule)
- PageHeight As Long (hauteur de la page complète exprimée en unités logiques, lect. seule)
- PageWidth As Long (largeur de la page complète exprimée en unités logiques, lect. seule)
- ScaleHeight As Long (hauteur de l'espace imprimable exprimée en unités logiques)
- ScaleWidth As Long (largeur de l'espace imprimable exprimée en unités logiques)
- HeightDot As Long (hauteur de l'espace imprimable exprimée en dots (points), lect. seule)
- WidthDot As Long (largeur de l'espace imprimable exprimée en dots (points), lect. seule)
- PrintJobID() As Long (ID du travail d'impression en cours, lecture seule)
PROPRIÉTÉS (avec argument) DE L'OBJET PPRINTER |
- TextWidth(strText As String) As Long (retourne la largeur d'un texte en UL)
- TextHeight(strText As String) As Long (retourne la hauteur d'un texte en UL)
FONCTIONS DE CONVERSION D'UNITÉS |
Rappel sur les unités :
Unité physique (ou dot = pixel d'imprimante) : c'est le plus petit point imprimable, et donc dépend de la résolution choisie (180 dpi, 360 dpi, 720 dpi, etc.)
Unité logique (UL) : c'est le système d'unités choisi par l'utilisateur en affectant des valeurs aux propriétés .Scaleheight et .ScaleWidth
Par défaut, si l'utilisateur ne fait rien, ce sont des Twips
La plupart des paramètres s'expriment en unités logiques, sauf .WidthDot, .HeightDot et .DrawWidth qui sont exprimés en dots (= unités physiques)
- DotToLogX(lngValue As Long) As Long (convertit des unités physiques en unités logiques sur l'axe X)
- DotToLogY(lngValue As Long) As Long (convertit des unités physiques en unités logiques sur l'axe Y)
- LogToDOTX(lngValue As Long) As Long (convertit des unités logiques en unités physiques (dots) sur l'axe X)
- LogToDOTY(lngValue As Long) As Long (convertit des unités logiques en unités physiques (dots) sur l'axe Y)
- LogToMMX(lngValue As Long) As Long (convertit des unités logiques en millimètres sur l'axe ))
- MMToDOTX(lngValue As Long) As Long (convertit des millimètres en unités physiques (dots) sur l'axe X)
- MMToDOTY(lngValue As Long) As Long (convertit des millimètres en unités physiques (dots) sur l'axe Y)
- MMToLogX(lngValue As Long) As Long (convertit des millimètres en unités logiques sur l'axe X)
- MMToLogY(lngValue As Long) As Long (convertit des millimètres en unités logiques sur l'axe Y)
MÉTHODES GRAPHIQUES DE L'OBJET PPRINTER |
- PaintPicture(PicHandle As Long, x As Long, Y As Long,
_
Optional lngWidth As Variant, Optional lngHeight As Variant)
' Cette méthode est équivalente à la méthode PaintPicture de l'objet PRINTER
' fonctionne avec la propriété .Picture ou .Image d'un PictureBox
' -- PicHandle = propriété .Picture ou .Image du PictureBox ou du contrôle Image
' -- x et y : coordonnées du coin gauche supérieur de l'image à dessiner
' -- lngWidth et lngHeight largeur et hauteur de l'image à dessiner (optionnels)
- PCadre(Xleft As Long, Ytop As Long, Xright As Long, Ybottom As Long)
' Cette méthode trace un cadre
- PCircle(XCenter As Single, YCenter As Single, Radius As Single, _
Optional Color As Variant, Optional Width As Long = 0) As Boolean
' Cette méthode dessine un cercle si les coordonnées (ScaleHeight et ScaleWidth) sont isotropiques
' Sinon, la figure dessinée est une ellipse
' -- XCenter et YCenter : coordonnées du centre du cercle
' -- Radius : rayon du cercle
' -- Color (optionnel) : couleur du tracé du cercle
' -- Width (optionnel) : épaisseur du contour exprimée en dots (pixels d'imprimante)
- PLine(XStart As Long, YStart As Long, XEnd As Long, YEnd As Long)
' Cette méthode trace une ligne
- PRectangle(Xleft As Long, Ytop As Long, Xright As Long, Ybottom As Long) As Boolean
' Cette méthode trace un rectangle
' PRectangle peut remplir le rectangle selon la valeur de FillStyle
' alors que PCadre laisse l'intérieur du rectangle transparent
' - PPrint(strText As String)
' Identique à la méthode PRINT de l'objet PRINTER
- PPrintWrapped(strText As String, XLeft As Long, XRight As Long, YTop As Long, Optional Flag As Long = 0)
' Imprime un texte en le wrappant automatiquement dans un rectangle
MÉTHODES DE GESTION D'IMPRESSION DE L'OBJET PPRINTER |
- PrintDialog(hWndLoc As Long, _
Optional ViewDialog As Boolean = True, _
Optional lngOrientation As Long = vbPRORPortrait) As Boolean
' Cette méthode est la première qui doit être invoquée
' juste après la création de l'objet PPRINTER
' Elle gère le dialogue pour définir les paramètres d'impression,
' elle crée un Device Context d'impression
' et initialise toutes les variables graphiques
' -- hWndLoc : handle de la fenêtre appelante
' -- ViewDialog (Vrai ou Faux, optionnel) : précise si un dialogue d'impression est demandé (Vrai)
' -- ou si on utilise l'imprimante et les paramètres d'impression par défaut (Faux)
' -- lngOrientation (optionnel): précise l'orientation que le dialogue propose
' par défaut (vbPRORPortrait ou vbPRORLandscape)
' Retourne FALSE si l'utilisateur annule le dialogue ou si pas d'imprimante
- Function StartDoc(strDocName As String) As Boolean
' Commence la création du travail d'impression
' -- strDocName - nom du document à imprimer
' Retourne VRAI si OK, FAUX sinon
- StartPage() As Boolean
' Début d'une nouvelle page
' Retourne VRAI si OK, FAUX sinon
- EndPage() As Boolean
' Termine la page
' Retourne VRAI si OK, FAUX sinon
- EndDoc() As Boolean
' Termine le document et lance l'impression
' Retourne VRAI si OK, FAUX sinon
Utilisation typique |
Dim PP As New PPRINTER
With PP
If .PrintDialog(hwnd)=False Then Exit Sub
.StartDoc "Document test"
.StartPage
.................................................
.................................................
.................................................
.EndPage
' S'il y a une autre page, on fait :
.StartPage
.................................................
.................................................
.................................................
.EndPage
.EndDoc
End With
Set PP = Nothing