comdlg32.dll自定义颜色 ChooseColorA vba x64 PtrSafe

Option Explicit
'VBA Windows API  https://vbaplanet.com/winapi.php
Private Const CC_RGBINIT = &H1
Private Const CC_FULLOPEN = &H2
Private Const CC_PREVENTFULLOPEN = &H4
Private Const CC_SHOWHELP = &H8
Private Const CC_ENABLEHOOK = &H10
Private Const CC_ENABLETEMPLATE = &H20
Private Const CC_ENABLETEMPLATEHANDLE = &H40
Private Const CC_SOLIDCOLOR = &H80
Private Const CC_ANYCOLOR = &H100

Private Type CHOOSECOLOR
   lStructSize As LongPtr
    hwndOwner As LongPtr
    hInstance As LongPtr
    rgbResult As Long
    lpCustColors As String
    flags As LongPtr
    lCustData As LongPtr
    lpfnHook As LongPtr
    lpTemplateName As String
End Type

'comdlg32.dll自定义颜色 ChooseColorA vba
Private Declare PtrSafe Function ChooseColorAPI Lib "comdlg32.dll" Alias _
    "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As LongPtr
    
     Dim CustomColors() As Byte
    
Private Sub CommandButton1_Click()
Dim cc As CHOOSECOLOR
    Dim Custcolor(16) As LongPtr
    Dim oRGB As Variant
    
    Dim lReturn As LongPtr

    cc.lStructSize = LenB(cc)
    cc.hwndOwner = 0
    cc.hInstance = 0
   cc.lpCustColors = 0
    cc.flags = CC_ANYCOLOR Or CC_FULLOPEN Or CC_PREVENTFULLOPEN Or CC_RGBINIT
    lReturn = ChooseColorAPI(cc)

    If lReturn <> 0 Then
       Me.Caption = "RGB Value User Chose: " & Str$(cc.rgbResult)
       oRGB = VbToRGB(cc.rgbResult)
       MsgBox oRGB(0)
       MsgBox oRGB(1)
       MsgBox oRGB(2)
       CustomColors = StrConv(cc.lpCustColors, vbFromUnicode)
    Else
       MsgBox "User chose the Cancel Button"

    End If
End Sub
Private Sub Form_Load()
    ReDim CustomColors(0 To 16 * 4 - 1) As Byte
    Dim i As Integer

    For i = LBound(CustomColors) To UBound(CustomColors)
       CustomColors(i) = 0
    Next i
End Sub

Private Function VbToRGB(ByVal mColor As Long) As Variant
    Dim Blue&, Red&, Green&
    Blue = 0: Red = 0: Green = 0
    Blue = mColor \ 65536
    Green = (mColor - 65536 * Blue) \ 256
    Red = mColor - 65536 * Blue - Green * 256
    VbToRGB = Array(Red, Green, Blue)
End Function

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值