方法三:调用WindowsAPI,调用Windows的调色板。
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 Long
End Type
Private Type RGBColor
R As Byte
G As Byte
B As Byte
space As Byte '用作间隔
End Type
Private Declare Function ChooseColorA Lib "Comdlg32" (pChoosecolor As CHOOSECOLOR) As Long
Dim CustColors(1 To 16) As RGBColor
Private Sub CommandButton3_Click()
Dim CColor As CHOOSECOLOR
With CColor
.lStructSize = Len(CColor) '结构长度
.lpCustColors = VarPtr(CustColors(1)) '存储自定义颜色的缓冲区地址,CustColors为公共变量,用于保存自定义颜色,以便于用户下一次打开调色板时仍能够使用前一次的自定义颜色
End With
If ChooseColorA(CColor) = 0 Then Exit Sub '等于0表示按下了取消键
Me.Label1.ForeColor = CColor.rgbResult
End Sub
此方法为API调用,调用的是Windows系统的调色板,稍显繁琐。
其中CColor.lpCustColors指向16种自定义颜色的地址,如果要在程序运行过程中保存用户的自定义颜色,使得任何时候打开调色板都可以继续使用之前所定义的颜色,可以通过定义CustColors(1 to 16) As Byte为公共变量,然后使用VarPtr函数转换后将VarPtr(CustColors(1))赋值给CColor.lpCustColors。上面的代码中定义了类型RGBColor,主要用于方便程序处理中取得自定义颜色的RGB值,实际使用中并非必需。
如果不需要保存自定义颜色,lpCustColors的赋值比较随意。
方法四:使用CommonDialog控件,调用Windows调色板,需要系统控件支持。(Windows7中好像没有这个控件)
Private Sub CommandButton4_Click()
On Error GoTo zz
Me.CommonDialog1.CancelError = True
Me.CommonDialog1.ShowColor
Me.Label1.ForeColor = CommonDialog1.Color
Exit Sub
zz:
End Sub
此方法也是调用Windows中的调色板,其缺点就是需要附带控件,Xp中一般都包含了CommonDialog控件。
综合以上几种方法来看,个人比较推荐方法二,简单易行,而且使用的是Excel中的调色板,还可以自定义颜色。如果对API比较熟悉,也可以使用方法三。除此以外,也可以自己制作一个调色板窗体供用户选择颜色。
|