Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> API  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702322
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

用API函数取色后,如何将其分成RGB颜色?

作者:cg1  摘自:access911.net  :cg1  更新日期:2003-12-21  浏览人次:

 

问题:

用API函数取色后,是一个10进制的数值,如何将其分成RGB颜色?

 

方法一:

用 HEX 函数将数值转换为 16 进制,然后,每两个切分一下就可以得到 RGB 数值了
Function C10ToRGB_1(lngColor As Long) As String
    Dim strR As String
    Dim strG As String
    Dim strB As String
    strR = lngColor Mod 256
    strG = lngColor \ 256 Mod 256
    strB = lngColor \ 256 \ 256
    
    C10ToRGB_1 = strR & "_" & strG & "_" & strB
End Function

Sub test1()
    Debug.Print C10ToRGB_1(33023)
    Debug.Print RGB(255, 128, 0)
End Sub


 

方法二:


【转载】
如果要将VB的颜色转换为COLORREF,需要使用OleTranslateColor函数。例子: 
    Private Declare Function OleTranslateColor Lib "olepro32.dll" _ 
     (ByVal OLE_COLOR As Long, _ 
     ByVal HPALETTE As Long, _ 
     pccolorref As Long) As Long 
     
    Private Sub GetRBGFromOLEColour(ByVal dwOleColour As Long, r As Long, g As Long, b As Long) 
     
     'pass a hex colour, return the rgb components 
     Dim clrref As Long 
     
     'translate OLE color to valid color if passed 
     OleTranslateColor dwOleColour, 0, clrref 
     
     b = (clrref \ 65536) And &HFF 
     g = (clrref \ 256) And &HFF 
     r = clrref And &HFF 
     
     Text1(0).Text = dwOleColour 
     Text1(1).Text = clrref 
     
    End Sub 


    更完整的例子参考:http://www.mvps.org/vbnet/index.html?code/system/oletranslatecolor.htm

 

方法三:

用 HEX 函数将数值转换为 16 进制,然后,每两个切分一下就可以得到 RGB 数值了

Sub test1()
    Debug.Print C10ToRGB(33023)
    Debug.Print RGB(255, 128, 0)
End Sub


Function C10ToRGB(lngA As Long) As String
    Dim strR As String
    Dim strG As String
    Dim strB As String
    Dim strHEX As String
    
    strHEX = Right("00000" & Hex(lngA), 6)
    
    'Debug.Print "B" & Mid(strHEX, 1, 2)
    'Debug.Print "G" & Mid(strHEX, 3, 2)
    'Debug.Print "R" & Mid(strHEX, 5, 2)
    
    strB = C16To10(Mid(strHEX, 1, 2))
    strG = C16To10(Mid(strHEX, 3, 2))
    strR = C16To10(Mid(strHEX, 5, 2))
    
    C10ToRGB = strR & "," & strG & "," & strB
    'Debug.Print C10ToRGB
End Function

'以下函数将 16 进制数值转换为 10 进制数值
Private Function C16To10(strA As String) As Double
    Dim a As Double
    Dim b As String
    Dim c As Double
    Dim l As Integer
    Dim i As Long
    l = Len(strA)
    For i = 1 To l
        b = Mid(strA, i, 1)
        Select Case b
            Case "A"
                b = 10
            Case "B"
                b = 11
            Case "C"
                b = 12
            Case "D"
                b = 13
            Case "E"
                b = 14
            Case "F"
                b = 15
        End Select
        c = c + b * 16 ^ (l - 1)
        l = l - 1
    Next
    C16To10 = c
    'Debug.Print C16To10
End Function


如何取色你可以参考本站
http://access911.net/index.asp?board=4&recordid=71FAB31E16DC

 

 

 
相关文章
     调用公共对话框COMMON DIALOG的API——选择颜色对话框
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利