Office XP CommandBars の Mask プロパティと Picture プロパティを設定する方法

文書翻訳 文書翻訳
文書番号: 286460 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

Microsoft Office XP では、CommandBarButton オブジェクトに Mask プロパティと Picture プロパティという 2 つの新しいプロパティが導入されました。これらのプロパティを使用して、独自に作成したコマンド バー コントロールに画像を配置できます。

: これらのプロパティは、Microsoft Office 2003 でも利用できます。

詳細

Mask プロパティと Picture プロパティは、IPictureDisp 型として定義されます。この型は Stdole ライブラリのメンバです。IPictureDisp は、プロセスの境界を越えてマーシャリングできないメソッドを使用しています。そのため、Mask プロパティと Picture プロパティはインプロセスでのみ呼び出すことができます (VBA マクロ、オートメーション アドイン、および ActiveX DLL はインプロセスで実行されます)。この動作の詳細については、「関連情報」を参照してください。

以下のサンプルでは、マスクされた画像を使用した CommandBar ボタンを追加するオートメーション アドインを作成する方法を示しています。

Picture と Mask の画像を作成する手順

  1. Microsoft ペイントを起動します。[変形] メニューの [キャンバスの色とサイズ] をクリックします。画像のサイズを 32 x 32 に変更し、[OK] をクリックします。
  2. 描画面に黄色の顔を描きます。円を囲む領域を青で塗りつぶします。

    元に戻す画像を拡大する
    サンプルの Circle.bmp の画像。この画像の作成手順はこの資料に記載されています。
  3. 画像を Circle.bmp として保存します。
  4. マスクを作成するには、円を黒で塗りつぶし、円の外側の領域を白で塗りつぶします。マスクの画像を CommandBar コントロールに追加するときに、マスクの黒の領域を可視にし、白の領域を透明にします。

    元に戻す画像を拡大する
    サンプルの Mask.bmp の画像。この画像の作成手順はこの資料に記載されています。
  5. 画像を Mask.bmp として保存します。

COM アドインを作成する手順


  1. Visual Basic を起動し、新しいアドイン プロジェクトを作成します。
  2. [プロジェクト] メニューの [参照設定] をクリックします。XP より前のバージョンの "Microsoft Office" タイプ ライブラリが有効になっている場合は、そのタイプ ライブラリを無効にし、Microsoft Office XP のタイプ ライブラリを有効にします。[OK] をクリックします。
  3. プロジェクト エクスプローラで、[frmAddin] を右クリックし、[frmAddin の解放] をクリックします。
  4. プロジェクト エクスプローラで、[デザイナ] の下の [Connect] をダブルクリックします。[アプリケーション] ボックスの一覧の [Microsoft Excel] をクリックし、[既定のロード方法] ボックスの一覧の [Startup] をクリックします。
  5. [表示] メニューの [コード] をクリックし、アドインのコードを以下のコードに置き換えます。
    Option Explicit
    
    Dim oExcel As Object
    Dim WithEvents oButton As Office.CommandBarButton
    
    Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
     ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
     ByVal AddInInst As Object, custom() As Variant)
    
      Dim oPic As stdole.IPictureDisp
      Dim oMask As stdole.IPictureDisp
    
      ' Load the picture and mask.
      Set oPic = LoadPicture(App.Path & "\circle.bmp")
      Set oMask = LoadPicture(App.Path & "\mask.bmp")
    
      ' Save an instance of our application.
      Set oExcel = Application
      ' Create a new button on the standard CommandBar.
      Set oButton = oExcel.CommandBars("Standard").Controls.Add(msoControlButton)
      With oButton
        ' Set a tag for the button.
        .Tag = "My Button"
        ' Set the event to fire when the button is pressed.
        .OnAction = "!<" & AddInInst.ProgId & ">"
        ' Set the picture property -- if you are using the Mask property, this
        ' property must be set before you set the Mask property.
        .Picture = oPic
        ' Set the Mask property.
        .Mask = oMask
        ' Show the button.
        .Visible = True
      End With
    End Sub
    
    Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _
       AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
    
       ' Delete the button.
       oButton.Delete
       ' Release references.
       Set oButton = Nothing
       Set oExcel = Nothing
     End Sub
    
    Private Sub oButton_Click(ByVal Ctrl As Office.CommandBarButton, _
      CancelDefault As Boolean)
      ' Our button was pressed.
      MsgBox "The button was pressed!"
    End Sub
    					
  6. ビットマップが格納されているフォルダにプロジェクトを保存し、アドインをビルドします。
  7. Excel を起動します。黄色の円を使用した新しいコントロールが標準の CommandBar に表示されます。黄色の円の周囲の領域が透明になっていることに注目してください。

その他の注意点

前述のように、IPictureDisp インターフェイスはプロセスの境界を越えてマーシャリングできません。プロセス外で Picture プロパティと Mask プロパティの設定を試みると、以下のエラーが発生します。
実行時エラー '-2147418113(8000ffff)':
'Picture' メソッドは失敗しました: '_CommandBarButton' オブジェクト
したがって、アウトプロセス オートメーション クライアントまたは Visual Basic IDE のデバッグ モードで実行されているインプロセス コンポーネントから、これらのプロパティを CommandBarButton に設定することはできません。Visual Basic IDE からこの資料に記載されているサンプル アドインを実行すると、上記のエラーが発生します。デバッグ中にこのエラーを回避するには、Picture プロパティと Mask プロパティを設定している行をコメントにするか、#If...Then...#Else ディレクティブなどの条件コンパイルを使用します。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
238228 [HOWTO] Visual Basic で Office 2000 COM アドインを作成する方法
230689 [SAMPLE] Visual C++ で作成した Office 2000 COM アドインのサンプル Comaddin.exe
150034 オートメーション サーバーから図オブジェクトの IPictureDisp 実装へのポインタをプロセスの境界を越えて渡すことができない
詳細については、次のマイクロソフト Web サイトを参照してください。
http://support.microsoft.com/ofd

プロパティ

文書番号: 286460 - 最終更新日: 2005年11月29日 - リビジョン: 4.4
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002
  • Microsoft Office FrontPage 2003
  • Microsoft FrontPage 2002 Standard Edition
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
キーワード:?
kbautomation kbhowto KB286460
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com