Marges de l'imprimante

Contenu du snippet

Ce code vous permet de retrouver les marges réelles de l'imprimante.
En effet certaines imprimantes n'utilisent pas la totalité de la surface
de la feuille ce qui rend difficile le positionnement exact de texte ou de
graphique sur cette feuille.

Source / Exemple :


' pour lancer cette sub utilisez le code suivant
' dans un bouton de commande

Private Sub Command1_Click()
  Dim G As Single
  Dim D As Single
  Dim H As Single
  Dim B As Single
  Dim msg As String
  
  pr_MargesImprimante G, D, H, B
  
  msg = "Marge Gauche en mm = " & Format$(G) & vbCr
  msg = msg & "Marge Droite en mm = " & Format$(D) & vbCr
  msg = msg & "Marge du Haut en mm = " & Format$(H) & vbCr
  msg = msg & "Marge du Bas en mm = " & Format$(B)
  MsgBox msg
End Sub

' Placez le code suivant dans un module.
'
' Déclarations de l'API windows.
Public Type POINTAPI
  x As Long
  y As Long
End Type
Public Const GETPRINTINGOFFSET = 13
Public Const GETPHYSPAGESIZE = 12
Public Const HORZRES = 8
Public Const VERTRES = 10
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Public Declare Function Escape Lib "gdi32" (ByVal hdc As Long, ByVal nEs As Long, ByVal nCount As Long, ByVal lpInData As Any, lpOutData As Any) As Long

'                            pr_MargesImprimante
'                            -------------------
' Retourne les marges par défaut de l'imprimante en millimètre. Ces marges
' correspondent aux limites physiques de l'imprimante en cours.
' ===========================================================================
' Procédures et fonctions utilisées : Aucunes
'
' G = Marge gauche.
' D = Marge droite.
' H = Marge du haut.
' B = Marge du bas.
' ===========================================================================
Sub pr_MargesImprimante(G As Single, D As Single, H As Single, B As Single)
'
  Dim pt1 As POINTAPI
  Dim pt2 As POINTAPI
  Dim x As Long
  Dim MargeGauche As Long
  Dim MargeHaut As Long
  Dim MargeDroite As Long
  Dim MargeBas As Long
  Dim LargeurAireImprimable As Long
  Dim HauteurAireImprimable As Long
  ' Récupération de la marge de gauche et de la marge du haut
  x = Escape(Printer.hdc, GETPRINTINGOFFSET, 0&, 0&, pt1)
  MargeGauche = pt1.x
  MargeHaut = pt1.y
  ' Récupération de l'aire imprimable.
  x = Escape(Printer.hdc, GETPHYSPAGESIZE, 0&, 0&, pt2)
  LargeurAireImprimable = GetDeviceCaps(Printer.hdc, HORZRES)
  HauteurAireImprimable = GetDeviceCaps(Printer.hdc, VERTRES)
  ' Calcul de la marge de droite et de celle du bas.
  MargeDroite = pt2.x - LargeurAireImprimable - MargeGauche
  MargeBas = pt2.y - HauteurAireImprimable - MargeHaut
  ' Calcul des marges en mm.
  G = (MargeGauche * Printer.TwipsPerPixelX) / 56.7
  D = (MargeDroite * Printer.TwipsPerPixelX) / 56.7
  H = (MargeHaut * Printer.TwipsPerPixelY) / 56.7
  B = (MargeBas * Printer.TwipsPerPixelY) / 56.7
'
End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.