Bonjour,

Je sais qu'en raison des différences de marges physiques et de résolution (dpi) d'une imprimante à l'autre, je cherche à faire en sorte que mon imprimé ait une position absolue par rapplrt à la marge de gauche et à la marge inférieure quel que soit le périphérique vers lequel j'envoie mon PrintDocument.

Le code qui suit m'a l'air OK pour obtenir les marges physiques de l'imprimante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
    Dim marge_physique_gauche As Single
    Dim marge_physique_haute As Single
    Dim dpiX As Integer
    Dim dpiY As Integer
 
    'API de lecture des capacités de l'imprimante
    Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal capIndex As Int32) As Int32
 
    Private Const LOGPIXELSX As Integer = 88
    Private Const LOGPIXELSY As Integer = 90
    Private Const PHYSICALOFFSETX As Integer = 112
    Private Const PHYSICALOFFSETY As Integer = 113
 
        'on récupere les marges physiques de l'imprimante
        Dim hdc As IntPtr = e.Graphics.GetHdc
        dpiX = GetDeviceCaps(hdc, LOGPIXELSX)      'résolution horizontale
        dpiY = GetDeviceCaps(hdc, LOGPIXELSY)      'résolution verticale
        marge_physique_gauche = (GetDeviceCaps(hdc, PHYSICALOFFSETX)) / dpiX * 100
        marge_physique_haute = (GetDeviceCaps(hdc, PHYSICALOFFSETY)) / dpiY * 100
        e.Graphics.ReleaseHdc(hdc)
Cependant, pour m'assurer que la position d'un rectangle hypothétique que je veux placer dans le coin supérieur gauche de ma page soit exactement au même endroit peu importe l'imprimante et sa résolution...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
e.Graphics.FillRectangle(Brushes.Blue, New Rectangle(??,??,<la largeur>,<la hauteur>)
...je cherche un algo permettant de calculer un point X,Y de départ qui ne «bougera» pas selon que je l'imprime sur un périphérique gérant une résolution de 1200x1200 dpi ou sur une imprimante à jet d'encre à 360x260 dpi. Quelqu'un a-t-il une idée?

Merci!