明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2770|回复: 4

请教一个VBA关于颜色的问题

[复制链接]
发表于 2007-10-14 00:40:00 | 显示全部楼层 |阅读模式

我想编一个东西,需要在我的用户界面上选择颜色,但是我不想用RGB输入形式,况且我的CommonDialog不知道怎么的未授权,不能用。我想调用CAD自身的那个颜色选择框,我发命令Color到CAD虽然能出来色彩选择对话框,但是我不知道怎么获取返回值,选的颜色变成改变当前图层颜色。

所以想问高人:怎么通过VBA 调用CAD的色彩选择对话框,选择颜色确定后要能够返回选择值!

另外,还有一个问题,我多半希望返回的是CAD的颜色索引值,好像那个ACI的颜色是CAD自己弄的,返回了索引值后,我怎么把这个颜色变成RGB值或者VB系统认识的颜色,因为我想把用来打开选择颜色的按钮在选完色之后变成刚才选择的颜色,这样才知道自己选了那个颜色!!

发表于 2007-10-14 22:33:00 | 显示全部楼层

'By Kevin Terry

Option Explicit

Private Declare Function acedSetColorDialog Lib _
"acad.exe" (color As Long, ByVal bAllowMetaColor _
As Boolean, ByVal nCurLayerColor As Long) As Boolean

'Color choice using autocad color selection dialog box
'
Public Function ChooseColor(ByVal lngInitClr As Long, ByVal blnMetaColor As Boolean, _
ByVal lngCurClr As Long) As Long

ChooseColor = -1

On Error Resume Next

If acedSetColorDialog(lngInitClr, blnMetaColor, lngCurClr) Then
ChooseColor = lngInitClr
End If

On Error GoTo 0

End Function


Public Sub test()
Dim lColor As Long
lColor = ChooseColor(lColor, True, lColor)
MsgBox "You have selected color " & lColor
End Sub

发表于 2007-10-14 22:38:00 | 显示全部楼层

Public Function ACI2RGB(ByVal intACI As Integer) As Long
Dim col As New AcadAcCmColor
col.ColorIndex = intACI
ACI2RGB = RGB(col.Red, col.Green, col.Blue)
End Function

Public Function RGB2ACI(ByVal lngRGB As Long) As Integer
Dim col As New AcadAcCmColor
Dim r As Byte, g As Byte, b As Byte
'split color into rgb components
r = (lngRGB Mod 256 ^ 2) Mod 256
g = (lngRGB Mod 256 ^ 2) \ 256
b = lngRGB \ 256 ^ 2
col.SetRGB r, g, b
RGB2ACI = col.ColorIndex
End Function

 楼主| 发表于 2007-10-15 19:38:00 | 显示全部楼层

感谢版主老大!!!!!

东西已经受到,正在学习中.....

发表于 2008-3-3 09:45:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 11:37 , Processed in 0.182003 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表