Public Sub Posit(ByVal O As Object, Optional ByVal X As Double, Optional ByVal Y As Double)
Rem. ——— Vous pouvez au préalable positionner l'UserForm par rapport à quelque chose.
' O: Ce par rapport à quoi vous voulez le positionner. X et Y indiqueront comment :
' X: -1: Collé au coté gauche, 0: Centré horizontalement, 1: Collé au coté droit.
' Y: -1: Collé au bord supérieur, 0: Centré verticalement, 1: Collé juste en dessous.
' D'autres valeurs entraineront un recouvrement partiel ou un certain éloignement.
' Mais rien ne vous empêche de rectifier encore ensuite la propriétés Left ou Top
' de l'UFmCalend pour ajouter un interstice en points au bord de l'objet.
Dim U As Object, G As Double, D As Double, H As Double, B As Double, K As Double, Z As Double
If TypeOf O Is MSForms.Control Then
G = O.Left: H = O.Top: Set U = O.Parent
Do: K = (U.Width - U.InsideWidth) / 2
G = G + U.Left + K: H = H + U.Top + U.Height - U.InsideHeight - K
If Not TypeOf U Is MSForms.Frame Then Exit Do
Set U = U.Parent: Loop
D = G + O.Width: B = H + O.Height
Else
Z = ActiveWindow.Zoom / 100
K = GetDeviceCaps(GetDC(0), 88) / 72
G = ActiveWindow.PointsToScreenPixelsX(O.Left * K * Z) / K
D = ActiveWindow.PointsToScreenPixelsX((O.Left + O.Width) * K * Z) / K
K = GetDeviceCaps(GetDC(0), 90) / 72
H = ActiveWindow.PointsToScreenPixelsY(O.Top * K * Z) / K
B = ActiveWindow.PointsToScreenPixelsY((O.Top + O.Height) * K * Z) / K
End If
Me.Left = (X * (D - G + Me.Width + 6) + G + D - Me.Width - 6) / 2 + 3
Me.Top = (Y * (B - H + Me.Height + 6) + H + B - Me.Height - 6) / 2 + 3
End Sub