Const VerticalScrollBarBordersPixels As Long = 2 * 2.5 'Borders around the Vertical Scroll Bar
Const HorizontalScrollBarBordersPixels As Long = 2 * 4 'Borders around the Horizontal Scroll Bar
Const StatusBarHeightPixels = 26
With ActiveWindow
Set Shape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
.VisibleRange.Left + CXDLGFRAME - 2 * CXBORDER, _
.VisibleRange.Top + CYDLGFRAME - 2 * CYBORDER, _
.Width - (.Width - .UsableWidth) - 27.4 * DisplayScale * PixelToPoint, _
.Height - (.Height - .UsableHeight) - 21.2 * DisplayScale * PixelToPoint)
End With
Oui, là ce sont bien des dpi, ou plus exactement des "ppi" (pixels per inch).Ce chiffre de 96 (dpi ou je ne sais quoi), il vient d'où ? Y a-t-il une constante pour le décrire ?
J'aimerais bien trouver en VBA une constante ou une méthode pour le récupérer, mais nada !Oui, là ce sont bien des dpi, ou plus exactement des "ppi" (pixels per inch).
tu es sérieux @Dudu2?J'aimerais bien trouver en VBA une constante ou une méthode pour le récupérer, mais nada !
Trouver cette constante, je ne sais pas si c'est possible. Mais une méthode l'est probablement.J'aimerais bien trouver en VBA une constante ou une méthode pour le récupérer, mais nada !
Oui je suis sérieux, enfin il me semble. Et je ne crois pas à la responsabilité des drivers, sinon ce serait le chaos total.tu es sérieux @Dudu2?
msgbox GetDpiForwindow(application.hwnd)
Function DisplayScale() As Double
With Application
DisplayScale = GetDpiForWindow(.hwnd) / 96
End With
End Function
Logiquement il devrait effectivement y avoir une constante dans Windows qui te donnerait ce 96.Donc j'ai toujours 96 dans le calcul et rien pour remplacer cette valeur en dur, ce qui me plait moyennement.
With ActiveSheet.Shapes("jaune")
.Top = 0.75
.Left = 0.75
If .width <= 200 Then
.width = dims.width - IIf(ActiveWindow.DisplayVerticalScrollBar, 5, 4)
.height = dims.height - IIf(ActiveWindow.DisplayHorizontalScrollBar, 5, 10)
Else
Sub test()
MsgBox DpiFactor
End Sub
Function DpiFactor()
Dim ItP&, ImmuAble#, PtoPx#
ItP = Application.InchesToPoints(1)
ImmuAble = 4 / 3
With ActiveWindow.Panes(1)
PtoPx = (.PointsToScreenPixelsX(ItP * (.Parent.Zoom / 100)) - .PointsToScreenPixelsX(0)) / ItP
End With
DpiFactor = PtoPx / ImmuAble
End Function
Const VerticalScrollBarBordersPixels As Long = 2 * 2.5 'Borders around the Vertical Scroll Bar
Const HorizontalScrollBarBordersPixels As Long = 2 * 5 'Borders around the Horizontal Scroll Bar
Const StatusBarHeightPixels = 22