[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