1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Public Function RenvoieCoordEcran(Ctrl As Control) As Double()
'Cette fonction renvoie les coordonnées de pixels situés aux coins du contrôle Ctrl.
'Elle renvoie un tableau contenant les coordonnées suivantes :
'- Abscisse en haut à gauche
'- Ordonnée en bas à gauche
'- Abscisse en haut à droite
'- Ordonnée en bas à dtoite
Dim DimForm As RECT, EpaisseurX As Long, EpaisseurY As Long, Coords(3) As Double, Pt2Px As Double, HandleBureau As Long, DPI As Integer
'https://www.ninjaunits.com/converters/pixels/points-pixels/
'How many Pixels are in a Point? : 1 pt = 1.333(3) px => Pour 96 DPI
'How many Points are in a Pixel? : 1 px = 0.75 pt => Pour 96 DPI
'Pour déterminer le taux de conversion, on applique un ratio
HandleBureau = GetDC(0)
DPI = GetDeviceCaps(HandleBureau, LOGPIXELSX)
ReleaseDC 0, HandleBureau
Pt2Px = (1 + (1 / 3)) / 96 * DPI
GetWindowRect GetActiveWindow, DimForm 'Coordonnées rectangle du formulaire contenant le contrôle en Pixels
With Ctrl
EpaisseurX = (.Parent.Width - .Parent.InsideWidth) / 2 'Epaisseur de la bordure verticale. / 2 car il y a 2 bordures (gauche et droite)
EpaisseurY = (.Parent.Height - .Parent.InsideHeight) - EpaisseurX 'Epaisseur de la bordure horizontale
'Le - EpaisseurX correspond à la hauteur de la bordure du bas qui possède la même épaisseur que celles des côtés
Coords(0) = DimForm.Left + (EpaisseurX + .Left) * Pt2Px
Coords(1) = DimForm.Top + (EpaisseurY + .Top + .Height) * Pt2Px
Coords(2) = DimForm.Left + (EpaisseurX + .Left + .Width) * Pt2Px
Coords(3) = DimForm.Top + (EpaisseurY + .Top) * Pt2Px
End With
RenvoieCoordEcran = Coords
End Function |
Partager