#If Win32 Then
Private Type ChooseColor
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As Long
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Private Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As Long
#Else
Private Type ChooseColor
lStructSize As Long
hwndOwner As LongPtr
hInstance As LongPtr
rgbResult As Long
lpCustColors As LongPtr
flags As Long
lCustData As LongPtr
lpfnHook As LongPtr
lpTemplateName As String
End Type
Private Declare PtrSafe Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As Long
#End If
Private Enum cons
CC_ANYCOLOR = &H100
CC_ENABLEHOOK = &H10
CC_ENABLETEMPLATE = &H20
CC_ENABLETEMPLATEHANDLE = &H40
CC_FULLOPEN = &H2
CC_PREVENTFULLOPEN = &H4
CC_RGBINIT = &H1
CC_SHOWHELP = &H8
CC_SOLIDCOLOR = &H80
End Enum
Sub test()
Debug.Print DialogColor
End Sub
Public Function DialogColor(Optional lDefaultColor As Variant= "6646548") As Long
Dim CC As ChooseColor
Dim lRetVal As Long
Static CustomColors(16) As Long
'Some predefined color, there are 16 slots available for predefined colors
'You don't have to defined any, if you don't want to!
CustomColors(0) = RGB(255, 255, 255) 'White
CustomColors(1) = RGB(0, 0, 0) 'Black
CustomColors(2) = RGB(255, 0, 0) 'Red
CustomColors(3) = RGB(0, 255, 0) 'Green
CustomColors(4) = RGB(0, 0, 255) 'Blue
With CC
.lStructSize = LenB(CC)
.flags = CC_ANYCOLOR Or CC_FULLOPEN Or CC_PREVENTFULLOPEN Or CC_RGBINIT
If IsNull(lDefaultColor) = False _
And IsMissing(lDefaultColor) = False Then .rgbResult = lDefaultColor 'Set the initial color of the dialog
.lpCustColors = VarPtr(CustomColors(0))
End With
lRetVal = ChooseColor(CC)
If lRetVal = 0 Then
'Cancelled by the user
DialogColor = RGB(255, 255, 255) ' White
Else
DialogColor = CC.rgbResult
End If
End Function