Visual Basic 6(VB6)的颜色选择器控件

Visual Basic 6(VB6)的颜色选择器控件,vb6,Vb6,我正在寻找一个免费的颜色选择器控件的Visual Basic 6。类似于或。有吗 更新。以下是我目前的发现: 看看: 它应该显示标准颜色对话框(在comdlg32.dll中选择颜色API) 为方便起见,以下是代码: Private Type ChooseColorStruct lStructSize As Long hwndOwner As Long hInstance As Long rgbResult As Long lpCustColors A

我正在寻找一个免费的颜色选择器控件的Visual Basic 6。类似于或。有吗

更新。以下是我目前的发现:

  • 看看:

    它应该显示标准颜色对话框(在comdlg32.dll中选择颜色API)


    为方便起见,以下是代码:

    Private Type ChooseColorStruct
        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" _
        (lpChoosecolor As ChooseColorStruct) As Long
    Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor _
        As Long, ByVal lHPalette As Long, lColorRef As Long) As Long
    
    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 Const CLR_INVALID = &HFFFF
    
    
    ' Show the common dialog for choosing a color.
    ' Return the chosen color, or -1 if the dialog is canceled
    '
    ' hParent is the handle of the parent form
    ' bFullOpen specifies whether the dialog will be open with the Full style 
    ' (allows to choose many more colors)
    ' InitColor is the color initially selected when the dialog is open
    
    ' Example:
    '    Dim oleNewColor As OLE_COLOR
    '    oleNewColor = ShowColorsDialog(Me.hwnd, True, vbRed)
    '    If oleNewColor <> -1 Then Me.BackColor = oleNewColor
    
    Function ShowColorDialog(Optional ByVal hParent As Long, _
        Optional ByVal bFullOpen As Boolean, Optional ByVal InitColor As OLE_COLOR) _
        As Long
        Dim CC As ChooseColorStruct
        Dim aColorRef(15) As Long
        Dim lInitColor As Long
    
        ' translate the initial OLE color to a long value
        If InitColor <> 0 Then
            If OleTranslateColor(InitColor, 0, lInitColor) Then
                lInitColor = CLR_INVALID
            End If
        End If
    
        'fill the ChooseColorStruct struct
        With CC
            .lStructSize = Len(CC)
            .hwndOwner = hParent
            .lpCustColors = VarPtr(aColorRef(0))
            .rgbResult = lInitColor
            .flags = CC_SOLIDCOLOR Or CC_ANYCOLOR Or CC_RGBINIT Or IIf(bFullOpen, _
                CC_FULLOPEN, 0)
        End With
    
        ' Show the dialog
        If ChooseColor(CC) Then
            'if not canceled, return the color
            ShowColorDialog = CC.rgbResult
        Else
            'else return -1
            ShowColorDialog = -1
        End If
    End Function
    
    Private类型选择颜色结构
    l结构尺寸与长度相同
    hwndOwner尽可能长
    只要
    rgbResult尽可能长
    我们的颜色一样长
    旗子一样长
    lCustData尽可能长
    长钩
    lpTemplateName作为字符串
    端型
    私有声明函数ChooseColor Lib“comdlg32.dll”别名“ChooseColorA”_
    (lpChoosecolor作为ChooseColorStruct)长度相同
    专用声明函数OleTranslateColor Lib“oleaut32.dll”(ByVal lOleColor_
    一样长,ByVal一样长,lcorref一样长)一样长
    私有常量CC_RGBINIT=&H1&
    私有常量CC_FULLOPEN=&H2&
    私有Const CC_prevent fullopen=&H4&
    私有Const CC_SHOWHELP=&H8&
    私有Const CC_ENABLEHOOK=&H10&
    Private Const CC_enablemplate=&H20&
    Private Const CC_ENABLETEMPLATEHANDLE=&H40&
    私有常量CC_SOLIDCOLOR=&H80&
    私人Const CC_ANYCOLOR=&H100&
    私有常量CLR_无效=&HFFFF
    '显示用于选择颜色的通用对话框。
    '返回所选颜色,如果对话框被取消,则返回-1
    '
    'hParent是父窗体的句柄
    'bFullOpen指定对话框是否以完整样式打开
    '(允许选择更多颜色)
    'InitColor是对话框打开时最初选择的颜色
    例如:
    “暗淡的oleNewColor作为OLE_颜色
    'oleNewColor=ShowColorsDialog(Me.hwnd、True、vbRed)
    '如果oleNewColor-1,则Me.BackColor=oleNewColor
    函数ShowColorDialog(可选ByVal hParent,长度不一样_
    可选ByVal bFullOpen作为布尔值,可选ByVal InitColor作为OLE_颜色)_
    只要
    Dim CC作为选择颜色结构
    Dim Acolorf(15)的长度与
    暗淡的衬布颜色和长的一样
    '将初始OLE颜色转换为长值
    如果InitColor为0,则
    如果是OleTransaleColor(InitColor,0,lInitColor),则
    lInitColor=CLR\u无效
    如果结束
    如果结束
    '填充ChooseColorStruct结构
    与CC
    .L结构尺寸=长度(CC)
    .hwndOwner=hParent
    .lpCustColors=VarPtr(acorref(0))
    .rgbResult=lInitColor
    .flags=CC_SOLIDCOLOR或CC_ANYCOLOR或CC_RGBINIT或IIf(b完全打开_
    CC_全开,0)
    以
    '显示对话框
    如果选择颜色(CC),则
    '如果未取消,请返回颜色
    ShowColorDialog=CC.rgbResult
    其他的
    '否则返回-1
    ShowColorDialog=-1
    如果结束
    端函数
    
    VB6中内置了一个颜色选择器。公共对话框控件

    下面是代码示例


    为什么不呢???@MarkJ-我也喜欢你的解决方案-为什么不呢?唯一的区别是,在使用控件时,需要在项目中指定对它的引用,并且需要分发OCX。这两个都不是什么大问题,但这就是区别。有些人害怕和厌恶OCX,因为他们不了解部署。同样的人会抱怨,如果你给他们非琐碎的源代码,他们可能只是“黑匣子”,因为“我没有多余的代码。”你不会赢的。我一直希望脚本kiddies会转移到.Net,但我还在等待。@Bob@rskar IMHO VB6带有API调用的代码需要谨慎处理,因为它很容易出错。我在MSDN杂志文章和Microsoft知识库文章中看到了有缺陷的VB6 API代码。就我个人而言,在使用任何API代码之前,我会亲自查看API文档,这很耗时。rskar代码的一个优点是它来自VB2TheMax,这是可靠的。
    Private Sub Command1_Click()
      ' Set Cancel to True
      CommonDialog1.CancelError = True
      On Error GoTo ErrHandler
      'Set the Flags property
      CommonDialog1.Flags = cdlCCRGBInit
      ' Display the Color Dialog box
      CommonDialog1.ShowColor
      ' Set the form's background color to selected color 
      Form1.BackColor = CommonDialog1.Color
      Exit Sub
    
    ErrHandler:
      ' User pressed the Cancel button
    End Sub