[UserForm P4] Arrondir les angles

Toujours dans l'optique de personnaliser un Userform le code ci-dessous permet d'arrondir les angles jusqu'à en faire un rond.

Voir une démo générale sur ce tuto.

Coller le code dans un module général (Module1 par exemple)

Option Explicit
Const cPointToPixel = 1.333333
Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Sub RoundCorners(ByRef oFrm As UserForm, lWidth As Long, lHeight As Long, Optional ByVal Angle As Byte = 15, Optional ByVal Angle2 As Byte = 0)
Dim lRet As Long
Dim lHwnd As Long
    If Angle2 = 0 Then Angle2 = Angle
    With oFrm
        lHwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", .Caption)
'       on travaille en  pixels
        lWidth = lWidth * cPointToPixel
        lHeight = lHeight * cPointToPixel
'        découpe
        lRet = CreateRoundRectRgn(0, 0, lWidth, lHeight, Angle, Angle2)
        Call SetWindowRgn(lHwnd, lRet, True)
        Call DeleteObject(lRet)
    End With
End Sub

Dans le module de l'UserForm

Private Sub UserForm_Initialize()
'Pour avoir une découpe ronde
   RoundCorners Me, Me.Width, Me.Height, 50
'Mais vous pouvez jouer avec les valeurs pour avoir des formes ovale, par exemple
   RoundCorners Me, Me.Width, Me.Height, 50, 125
'La valeur maximum est 255
End Sub
Rechercher des sujets similaires à "userform arrondir angles"