ご利用される方へお願い
  現在配布中のソフトは、Alpha Edition (開発中版) または、Beta Edition(動作確認中版) です。
 動作エラーや計算結果が不正確なケースを発見しましたら、 当方の 掲示板 へ、フィードバックをお願いします。
 
 

 
 AutoCAD VBA ColorIndex UserForm
 
 Ver.1.01 (βバージョン) [2007/03/27]
 
   AutoCAD VBA用 インデックスカラー ダイアログ(ユーザーフォーム)です。
  
   が・・・下記の 参考リンク先  で紹介されている方法がスマートです(笑)
 
   もしくは、AutoLISP 照会関数 (acad_colordlg colornum [flag]) を使用する方法 もあります。
 
 
 
DownLoad (CI_UF101.lzh/18.6KB)
 
  
インデックスカラー ダイアログ (2000i 様式のユーザーフォーム)

 

画像は Ver.1.00のものです

 
 ・解凍したファイル "AutoCAD2000i_ColorIndex101.frm"を
  インポート(読込)で、ご使用下さい
   ※インポート(読込)時には、"AutoCAD2000i_ColorIndex101.frx"も同じフォルダに
 
 ・2000iの様式でインデックスカラーのみ(配置が現バージョンと多少異なります)
 ・AutoCAD 2000i (VBA のバージョン 6) 以降
  (注意)2000i 以外のバージョン (2000,R14.01,2002,2004,2005,2006,2007) では、動作確認していません
 ・フォームのロードに少し時間がかかります
 ・ColorIndex.I_C.Captionに、インデックス カラー (0-256)
 ・ColorIndex.R_G_B.Captionに、赤, 緑, 青(RGB) (xxx, xxx, xxx)
 ・キャンセル時は空欄 ("")
 ・理論色を使用しない場合には修正してください
 
 
 上記の使用例(標準モジュール)です
 Option Explicit
 '
 Public Sub GetIndexColor()
 Dim MsgTmp As String
    Load ColorIndex
      ''初期値を設定する場合
      ''CTextBox1_AfterUpdate をPublicに変更して
      'ColorIndex.TextBox1.Value = "1" 'インデックス カラー (1-256)
      'Call ColorIndex.TextBox1_AfterUpdate
    ColorIndex.Show
    MsgTmp = "" & vbCrLf
    MsgTmp = MsgTmp & "インデックス カラー : " & ColorIndex.I_C.Caption & vbCrLf    
    MsgTmp = MsgTmp & "赤, 緑, 青(RGB) : " & ColorIndex.R_G_B.Caption & vbCrLf    
    MsgBox MsgTmp
    Unload ColorIndex
    End
 End Sub
 
 
 
 
 更新内容
 [2007/03/27] Ver.1.01 Private Sub UserForm_QueryClose修正
 [2007/03/26] Ver.1.00 新規公開
 
 
 以前のバージョン
 DownLoad (CI_UF100.lzh/18.6KB)
 
 
参考 Links
 ・
 
 ・
色選択ダイアログボックスを呼び出すサンプル(AutoCAD ARX/VBA 専用会議室)

True Color selector (http://discussion.autodesk.com/thread.jspa?messageID=5068036)

 
AutoLISP 照会関数 (acad_colordlg colornum [flag]) を使用する方法
Public Function AutoLISP_acad_colordlg_ByVBA(Colornum As Integer, Optional Flag As String = "nil", Optional USERSNo As Integer = 1) As Variant
'AutoCAD の標準の[色選択]ダイアログ ボックスを表示
'  AutoLISP 照会関数 (acad_colordlg colornum [flag]) を使用
' 引数 Colornum [Integer] 整数 色番号(0-256) 既定値として表示される AutoCAD 色番号
'     Flag     [Variant/String] 省略可(規定値 1)
'                nil に設定すると、[BYLAYER]と[BYBLOCK]ボタンが使用不可能になります。
'                flag 引数を省略するか nil 以外の値を指定すると、
'                [BYLAYER]と[BYBLOCK]ボタンが使用可能になります。
'     USERSNo  [Integer] 省略可(規定値 1)
'                戻値を格納するシステム変数のNo (1,2,3,4,5)
'  戻り値 正常終了 色番号(0-256) [Variant/Integer]
'      ダイアログキャンセル時 -1 [Variant/Integer]
'      異常終了 Empty [Variant/Empty]
'  その他  ダイアログキャンセル時の戻り値が"nil"となるため "USERS*" を使用する
Dim ComStr    As String
Dim USERSname As String
    On Error GoTo ERR:
    If 0 <= Colornum And Colornum <= 256 Then
        Select Case USERSNo
            Case 1, 2, 3, 4, 5: USERSname = "USERS" & CStr(USERSNo)
            Case Else:          Exit Function
        End Select
        ActiveDocument.SetVariable USERSname, ""
        ComStr = ""                                            '送信するLISPコマンド作成
        ComStr = ComStr & "(setvar """ & USERSname & """ "     'AutoCAD システム変数 "USERS?" に代入
        ComStr = ComStr & "(vl-princ-to-string "               'LISP データを表す文字列を、princ 関数で出力したかのように返す
        '------------------------------------------------------
        ComStr = ComStr & "(acad_colordlg " & CStr(Colornum)   'AutoCAD の標準の[色選択]ダイアログ ボックスを表示
        If Flag = "nil" Then
            ComStr = ComStr & " nil)"                          '[BYLAYER]と[BYBLOCK]ボタン 使用不可
        Else
            ComStr = ComStr & " T)"                            '[BYLAYER]と[BYBLOCK]ボタン 使用可
        End If
        '------------------------------------------------------
        ComStr = ComStr & ")"                                  '
        ComStr = ComStr & ")" & vbCr                           '
        ActiveDocument.SendCommand ComStr
        AutoLISP_acad_colordlg_ByVBA = ActiveDocument.GetVariable(USERSname)
        If AutoLISP_acad_colordlg_ByVBA = "nil" Then
            AutoLISP_acad_colordlg_ByVBA = -1
        Else
            AutoLISP_acad_colordlg_ByVBA = CInt(AutoLISP_acad_colordlg_ByVBA)
        End If
    Else
        AutoLISP_acad_colordlg_ByVBA = Empty
    End If
Exit Function
ERR:
    Exit Function
End Function

'使用例
Public Sub Test()
Dim Colornum As Variant
    Colornum = AutoLISP_acad_colordlg_ByVBA(3, "nil", 1)   '[BYLAYER]と[BYBLOCK]ボタン 使用不可
    If IsEmpty(Colornum) Then
        Msgbox "Empty"
    ElseIf Colornum = -1 Then
        MsgBox "キャンセル"
    Else
        MsgBox Colornum
    End If
    Colornum = AutoLISP_acad_colordlg_ByVBA(3, "T", 1)     '[BYLAYER]と[BYBLOCK]ボタン 使用可
    If IsEmpty(Colornum) Then
        Msgbox "Empty"
    ElseIf Colornum = -1 Then
        MsgBox "キャンセル"
    Else
        MsgBox Colornum
    End If
End Sub