#343 色の設定ダイアログによって色を選択させる方法 VBA、API

Windows APIを使って「色の設定」ダイアログを表示させる方法です。
色の設定ダイアログ

まず、標準モジュールに次のようなコードを記述します。これはいずれも色の設定ダイアログを利用するためのAPIに関する宣言で、モジュールのDeclarationsセクションに記述します。

Private Type ChooseColor
  lStructSize As Long
  hWndOwner As Long
  hInstance As Long
  rgbResult As Long
  lpCustColors As String
  flags As Long
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type

Private Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" _
                                      (pChoosecolor As ChooseColor) As Long

Private Const CC_RGBINIT = &H1                '色のデフォルト値を設定
Private Const CC_LFULLOPEN = &H2              '色の作成を行う部分を表示
Private Const CC_PREVENTFULLOPEN = &H4        '色の作成ボタンを無効にする
Private Const CC_SHOWHELP = &H8               'ヘルプボタンを表示


続いて、次のようなFunctionプロシージャを標準モジュール内に作成します。これは「色の設定ダイアログを表示してそこで選択された色を返す」一連の処理をひとまとめにしたプロシージャです。これを自分で作ったフォームなどのモジュールから呼び出すことで、簡単な記述で汎用的に利用することができます。

Public Function GetColorDlg(lngDefColor As Long) As Long
'機能 : 色の設定ダイアログを表示し、そこで選択された色のRGB値を返す
'引数 : lngDefColor デフォルト表示する色
'返値 : 成功時 RGB値   キャンセル時-1  エラー時 -2  (ゼロは黒なので注意)

  Dim udtChooseColor As ChooseColor
  Dim lngRet As Long

  With udtChooseColor
    'ダイアログの設定
    .lStructSize = Len(udtChooseColor)
    .hWndOwner = Application.hWndAccessApp
    .lpCustColors = String$(64, Chr$(0))
    .flags = CC_RGBINIT + CC_LFULLOPEN
    .rgbResult = lngDefColor
    'ダイアログを表示
    lngRet = ChooseColor(udtChooseColor)
    'ダイアログからの返り値をチェック
    If lngRet <> 0 Then
      If .rgbResult > RGB(255, 255, 255) Then
        'エラー
        GetColorDlg = -2
      Else
        '正常終了、RGB値を返り値にセット
        GetColorDlg = .rgbResult
      End If
    Else
      'キャンセルが押されたとき
      GetColorDlg = -1
    End If
  
  End With
  
End Function



次のプログラムならびに画面は、上記プロシージャの実際のフォームでの利用例です。[色の変更]ボタンをクリックすると、色の設定ダイアログが表示され、"ボックス1"という名前の四角形コントロールの背景色をその色に変更します。
Private Sub cmd色の変更_Click()

  Me!ボックス1.BackColor = GetColorDlg(Me!ボックス1.BackColor)

End Sub




| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved