Option Explicit Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Private Sub Command1_Click() Dim lngFormBackColor As Long Dim lngR As Long Dim lngG As Long Dim lngB As Long lngFormBackColor = Me.BackColor lngR = lngFormBackColor Mod &H100 lngG = (lngFormBackColor \ &H100) Mod &H100 lngB = (lngFormBackColor \ &H10000) Mod &H100 Debug.Print "背景色是:&H" & Hex(lngFormBackColor) Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")" End SubPrivate Sub Form_Load() Me.BackColor = &H808090 End Sub
老兄弄错了:Option Explicit Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Private Sub Command1_Click() Dim lngFormBackColor As Long Dim lngR As Long Dim lngG As Long Dim lngB As Long lngFormBackColor = Me.BackColor lngR = lngFormBackColor AND &HFF lngG = (lngFormBackColor AND &HFF00) \ 256 lngB = (lngFormBackColor AND &HFF0000) \ 65536 Debug.Print "背景色是:&H" & Hex(lngFormBackColor) Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")" End Sub'这个算法还有点问题,对应windows的系统颜色,其颜色值>&Hffff ff(如VB窗口的灰色为&H8000000F&)需要用一个函数转换,我忘记用哪个函数了
抱歉,的确是我错了,没有细细研究。正确的应该是这样Option Explicit Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long Private Sub Command1_Click() Dim lngFormBackColor As Long Dim lngR As Long Dim lngG As Long Dim lngB As Long lngFormBackColor = Me.BackColor '如果获取的颜色是小于0的,那么他是系统颜色。必须使用GetSysColor转换 '转换的规则是带入系统颜色的低字节,也就是系统颜色编号,来转换 If lngFormBackColor < 0 Then lngFormBackColor = GetSysColor(lngFormBackColor And &HFF&) lngR = lngFormBackColor Mod &H100 lngG = (lngFormBackColor \ &H100) Mod &H100 lngB = (lngFormBackColor \ &H10000) Mod &H100 Debug.Print "背景色是:&H" & Hex(lngFormBackColor) Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")" End Sub
Option Explicit
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Sub Command1_Click()
Dim lngFormBackColor As Long
Dim lngR As Long
Dim lngG As Long
Dim lngB As Long
lngFormBackColor = Me.BackColor
lngR = lngFormBackColor Mod &H100
lngG = (lngFormBackColor \ &H100) Mod &H100
lngB = (lngFormBackColor \ &H10000) Mod &H100
Debug.Print "背景色是:&H" & Hex(lngFormBackColor)
Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")"
End SubPrivate Sub Form_Load()
Me.BackColor = &H808090
End Sub
第一个80是透明度,0是完全不透明,FF是完全透明
第二个80是R
第三个80是G
第四个80是B
老兄弄错了:Option Explicit
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Sub Command1_Click()
Dim lngFormBackColor As Long
Dim lngR As Long
Dim lngG As Long
Dim lngB As Long
lngFormBackColor = Me.BackColor
lngR = lngFormBackColor AND &HFF
lngG = (lngFormBackColor AND &HFF00) \ 256
lngB = (lngFormBackColor AND &HFF0000) \ 65536
Debug.Print "背景色是:&H" & Hex(lngFormBackColor)
Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")"
End Sub'这个算法还有点问题,对应windows的系统颜色,其颜色值>&Hffff
ff(如VB窗口的灰色为&H8000000F&)需要用一个函数转换,我忘记用哪个函数了
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Private Sub Command1_Click()
Dim lngFormBackColor As Long
Dim lngR As Long
Dim lngG As Long
Dim lngB As Long
lngFormBackColor = Me.BackColor
'如果获取的颜色是小于0的,那么他是系统颜色。必须使用GetSysColor转换
'转换的规则是带入系统颜色的低字节,也就是系统颜色编号,来转换
If lngFormBackColor < 0 Then lngFormBackColor = GetSysColor(lngFormBackColor And &HFF&)
lngR = lngFormBackColor Mod &H100
lngG = (lngFormBackColor \ &H100) Mod &H100
lngB = (lngFormBackColor \ &H10000) Mod &H100
Debug.Print "背景色是:&H" & Hex(lngFormBackColor)
Debug.Print "转换为RGB后是:RGB(" & CStr(lngR) & "," & CStr(lngG) & "," & CStr(lngB) & ")"
End Sub