コマンド バー ボタンのイメージを使用する
Microsoft Office 2000/Visual Basic プログラマーズ ガイド |
各組み込みコマンド バー ボタンにはイメージが関連付けられています。イメージを含む組み込みボタンの FaceId プロパティの値が明確な場合は、カスタムのコマンド バー ボタンでイメージを使用できます。FaceId プロパティの値は、0 (イメージなし) から、ホスト アプリケーションで使用されるボタンの合計数 (通常は数千イメージ) までです。使用可能なボタン イメージを簡単に参照するには、ツール バーを作成していくつかのボタンを追加し、これらのボタンに FaceId プロパティの値を割り当てます。各ボタンは、指定された Faceid プロパティの値に関連付けられたイメージを表示します。Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH06 サブフォルダに含まれる CommandBarSamples.mdb の modCommandBarCode モジュールには、開始時および終了時の FaceId プロパティ値を受け取って、指定したすべてのイメージを表示するツール バーを作成する CBShowButtonFaceIDs プロシージャが含まれます。たとえば、200 ~ 299 までの値を持つボタンのイメージを表示するには、[イミディエイト] ウィンドウで CBShowButtonFaceIDs を次のように呼び出します。
? CBShowButtonFaceIDs(200, 299)
これにより、ボタンのイメージが図 6.4 のように表示されます。
図 6.4 組み込みツール バー アイコン
コマンド バー上のイメージに対する FaceId プロパティの値を表示するには、ボタン名に値が表示されるまでマウス ポインタをイメージ上に置きます。
コマンド バー ボタンのイメージをほかのボタンにコピーする別の方法は、CommandBars コレクションの FindControl メソッドを使用し、コピーするイメージの FaceId プロパティの値を指定することです。次に、CommandBarControl オブジェクトの CopyFace メソッドと PasteFace メソッドを使用して、イメージを新しいコントロールにコピーします。次のサンプル コードでは、これらのメソッドを使用して、既存のコマンド バー ボタンに関連付けられたアイコンを新しいコマンド バー ボタンに貼り付ける方法を示します。
Private Sub CBCopyIconDemo()
' このプロシージャは、既存のツール バー ボタンに関連付けられたイメージを
' 新しいツール バー ボタンにコピーする方法を示します。この例では、
' [ヘルプ] メニューの "トピックの検索" コントロールのイメージを
' 新しいコマンド バー コントロールにコピーします。
Dim cbrNew As CommandBar
Dim ctlNew As CommandBarControl
Const ERR_CMDBAR_EXISTS As Long = 5
On Error Resume Next
Set cbrNew = CommandBars.Add("TestCopyFaceIcon")
If Err = ERR_CMDBAR_EXISTS Then
Call CBDeleteCommandBar("TestCopyFaceIcon")
Set cbrNew = CommandBars.Add("TestCopyFaceIcon")
ElseIf Err <> 0 Then
Exit Sub
End If
On Error GoTo 0
Set ctlNew = cbrNew.Controls.Add(msoControlButton)
Call CBCopyControlFace("ヘルプ", "トピックの検索")
With ctlNew
.PasteFace
End With
cbrNew.Visible = True
End Sub
CBCopyIconDemo プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH06 サブフォルダに含まれる CH06_2.mdb の modCommandBarCode モジュールにあります。
このプロシージャは、そのほかに 2 つのカスタム プロシージャを呼び出します。前のトピックで説明した CBDeleteCommandbar プロシージャは、コマンド バーが既に存在する場合にそのコマンド バーを削除します。CBCopyControlFace プロシージャは、指定したコントロールのイメージをクリップボードにコピーします。
Function CBCopyControlFace(strCBarName As String, _
strCtlCaption As String)
' このプロシージャは、CopyFace メソッドを使用して、strCtlCaption 引数で
' 指定されたコントロールのイメージをクリップボードにコピーします。
Dim ctlCBarControl As CommandBarControl
Set ctlCBarControl = CommandBars.FindControl(msoControlButton, _
CBGetControlID(strCBarName, strCtlCaption))
ctlCBarControl.CopyFace
End Function
CBCopyControlFace プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH06 サブフォルダに含まれる CommandBarSamples.mdb の modCommandBarCode モジュールにあります。
CBCopyControlFace プロシージャは、CBGetControlID プロシージャを FindControl メソッドの Id 引数として使用します。CBGetControlID プロシージャは、指定したコントロールの Id プロパティを次の行を使用して返します。
CBGetControlID = Application.CommandBars(strCBarName) _
.Controls(strControlCaption).ID
また、CommandBar オブジェクトは、指定されたコントロールをこの CommandBar オブジェクト自体のみで検索する FindControl メソッドをサポートします。
これらのプロシージャをまとめて表示するには、挿入ポイント (カーソル) を CBCopyIconDemo プロシージャの任意の場所に置き、F8 キーを押してコードをステップ実行します。ほかのイメージを新しいコントロールにコピーするには、コマンド バーとコントロールの名前を変更します。