次の方法で共有


2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 3/3)

概要 : この記事は、同名の記事のパート 1 およびパート 2 の続編です。この記事には、Microsoft Office Fluent ユーザー インターフェイスについてよく寄せられる質問の一覧が含まれます。(33 印刷ページ)

Frank Rice、Microsoft Corporation

Ken Getz、MCW Technologies, LLC (英語)

発行 : 2006 年 5 月

更新 : 2007 年 3 月

適用対象 : Microsoft Office Access 2007、Microsoft Office Excel 2007、Microsoft Office PowerPoint 2007、Microsoft Office Outlook 2007、Microsoft Office Word 2007、Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office system、Microsoft Visual Studio 2005

目次

  • リボンおよび Office Fluent ユーザー インターフェイス

  • リボンおよび Office Fluent UI でよく寄せられる質問

  • まとめ

  • 追加情報

リボンおよび Office Fluent ユーザー インターフェイス

リボンは、Microsoft Office の 2007 リリースのいくつかのアプリケーションに対応する新しい Microsoft Office Fluent ユーザー インターフェイスの一部で、これらのアプリケーションには、Microsoft Office Access 2007、Microsoft Office Excel 2007、Microsoft Office Outlook 2007、および Microsoft Office Word 2007 などがあります。Office Fluent UI は、Office の従来リリースを構成していたメニュー、ツール バー、ダイアログ ボックスを基にしています。

リボンおよび Office Fluent UI でよく寄せられる質問

Fluent UI をカスタマイズする方法について、よく寄せられる質問がいくつかあります。

Beta 2 TR を使用したら、要素名が少し違うことに気付きました。特に、何が変わりましたか?

<advanced> 要素は <dialogBoxLauncher> に名前が変わりました。<fileMenu><menu id="fileMenu"> 要素は <officeMenu> に名前が変わりました。次のシグネチャを使用して、loadImage コールバックが追加されました。

Sub LoadImage(imageID, ByRef image)
public object loadImage(string imageId)

さらに、多くの idMso 値が変更されました。

組み込みコントロールの内部 ID を公開するにはどうすればいいですか?

次の手順に従って、アプリケーション内で idMso 値を個別に確認できます。

アプリケーションの idMso 値を検索するには

  1. Microsoft Office ボタンをクリックし、[アプリケーションのオプション] をクリックします。

  2. [ユーザー設定] をクリックし、情報を知りたい項目を選択します。

  3. ポインタを項目上に移動します。コントロールの idMso 値がかっこに囲まれてダイアログ ボックスのヒントに表示されます。

属性の制限について知っておく必要があるのは何ですか?

  • getShowImagegetShowlabelshowImageshowLabel 属性は、大型のコントロールで無視されます。

  • description および getDescription 属性はメニュー項目のみに適用されます。

  • getSize および size 属性はメニュー項目には適用されません。代わりに、size はメニュー項目の項目のサイズに基づきます。

  • getVisible および visible 属性は、ButtonGroup および Separator 要素で無視されます。

Fluent UI のエラー メッセージはどのように表示しますか?

各アプリケーションで全般オプションを設定して、エラー メッセージ表示を制御できます。

Fluent UI のエラー メッセージを表示するには

  1. Microsoft Office ボタンをクリックし、[アプリケーションのオプション] をクリックして、ダイアログ ボックスを表示します。

  2. [詳細設定] をクリックし、オプションの [全般] セクションを確認します。

  3. [アドイン ユーザー インターフェイスのエラーを表示する] を選択します。

UI を動的に変更するにはどうすればいいですか? たとえば、コードを実行中にラベルやイメージを更新したり、ボタンの表示/非表示を切り替えたり、一覧の内容を更新したりする場合があります。

2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 1/3)」の記事の「Fluent UI を動的に更新する」を参照してください。

Excel 2007 で、ワークシートが印刷プレビューのときに、クイック アクセス ツール バーまたはリボンからマクロを実行できません。これは想定どおりの動作ですか?

はい、これは想定どおりの動作です。Excel 2007 では、印刷プレビュー中にマクロの実行機能が無効になっています。たとえば、カスタム ボタンをクイック アクセス ツール バーに追加したとします。Microsoft Office Button をクリックしてから、[印刷] をポイントし、[印刷プレビュー] をクリックすると、現在のワークシートが印刷プレビュー モードで表示されます。クイック アクセス ツール バーの既定のボタンは無効になります。次に、カスタム ボタンをクリックしても、何も起こりません。つまり、ボタンに添付されたマクロは実行されず、ダイアログ ボックスは表示されません。

アドインで使用する UI のサイズを、コントロールの追加や削除に応じてプログラムで制御する方法はありますか?

現在の実装では、カスタム グループはサイズが変更されません。大きいサイズに固定されており、結果として優先度が高くなっています。

UI をリセットして、すべてのカスタマイズを削除する方法はありますか?

はい。UI をリセットするには、アドインをアンインストールした後で開いているドキュメントをすべて閉じます。これにより既定の UI に戻ります。

ギャラリー コントロールの項目数を動的に変更することはできますか?

はい。getItemCount、getItemLabel、または getItemImage 属性のコールバックを指定することで、ギャラリーを動的に埋めることができます。

Fluent UI のカスタム コントロールはサポートされていますか?

いいえ。代わりに、組み込みコントロールでサポートされないシナリオでは、カスタム作業ウィンドウ機能を使用して、カスタム コントロールをホストできます。詳細については、「Creating Custom Task Panes in the 2007 Office System」の記事を参照してください。

Office アプリケーションのすべてのコントロールを独自のカスタマイズで利用できますか?

いいえ、一部のコントロールは利用できません。たとえば、splitButtonGallery コントロールはカスタマイズで利用できません。(splitButtonGallery コントロールの例には、Word 2007 のテキストのハイライト色コントロールがあります)。

リボン UI のうち、新しい拡張モデルを使用してカスタマイズできない部分はどこですか?

コマンド バー オブジェクト モデルを使用して、ショートカット メニューをカスタマイズすることはできますが、ステータス バー、ミニ ツール バー、またはショートカット メニューをカスタマイズすることはできません。

ミニ ツール バーをオフにすることはできますか?

はい。以下に手順を示します。

ミニ ツール バーをオフにするには

  1. Microsoft Office ボタンをクリックし、[アプリケーションのオプション] をクリックして、[オプション] ダイアログ ボックスを表示します。

  2. [基本設定] をクリックします。

  3. [選択時にミニ ツール バーを表示する] オプションをオフにします。

Microsoft Office Access 2003 ソリューションでは、すべてのアクセス メニューとツール バーが表示されず、カスタム メニューとツール バーが表示されます。このソリューションを Access 2007 で開くとどうなりますか? カスタム メニューとツール バーは [アドイン] タブに表示されますか?

Access 2007 は、メニューとツール バーを非表示にしてカスタム メニューとツール バーのみを表示する Access 2003 アプリケーションの設定が有効であることを検出できます。この場合、Access 2007 はカスタム メニューとツール バーを [アドイン] タブに表示しません。

添付された Fluent UI カスタマイズ XML は Access 2007 でどのように機能しますか? カスタム UI をデータベースに格納できますか? できる場合、その方法は?

Access データベースには新しい Office Open XML Formats ファイル構造が導入されていないため、通常、Access の Microsoft Visual Basic for Applications (VBA) は、データベース内のテーブルにマークアップを保存します。USysRibbons という名前のテーブルを作成し、名前とマークアップを含む 2 つの列 (RibbonName という 255 文字のフィールド、RibbonXml というメモ フィールド) を格納します。次に、[オプション] ダイアログ ボックスを使用して、テーブルから名前でリボンを選択できます。また、標準のデータ操作テクニックを使用してテーブルから XML コンテンツを読み取り、Application.LoadCustomUI メソッドを呼び出して新しいリボン コンテンツを適用できます。詳細については、Web サイト「Microsoft Office Developer Center: Office Fluent UI」を参照してください。

2 つのアドインが同じ組み込みコントロールを再利用しようとした場合、どうなりますか?

コントロールを再利用しようとしている最後のアドインが、アクティブなアドインになります。

組み込みギャラリーからプログラムを使用して項目を削除することはできますか?

拡張を使用して、組み込みギャラリーからプログラムにより項目を削除することはできません。アプリケーションのオブジェクト モデルを使用すれば削除できる場合があります。

少なくとも "start-from-scratch" シナリオにおいて、クイック アクセス ツール バーをプログラムでカスタマイズすることはできますか?

はい。リボン要素の startFromScratch 属性を true に設定して、クイック アクセス ツール バーをカスタマイズできます。ただし、業務上の適切な理由がない限り、クイック アクセス ツール バーをカスタマイズしないことをお勧めします。この機能はユーザー カスタマイズ用にのみ用意されています。

UI をローカライズするにはどうすればいいですか?

2 つのオプションがあります。COM を使用する場合は、現在の UI 言語に応じて異なる XML ファイルを返すことができます。VBA を使用すると、言語ごとに複数の VBA ファイルを用意したり、すべてのコントロールの適切なラベルを返すコールバックを用意することができます。

Microsoft Office ボタンを削除できますか?

Microsoft Office ボタン メニューの項目をすべて無効または非表示にすることはできますが、ボタン自体を削除することはできません。

Fluent UI を使用するが、Office 2003 アプリケーションのコマンド バーを使用する VBA アドインを記述するにはどうすればいいですか?

Office 2003 および 2007 Microsoft Office system の両方の機能を使用する VBA ドキュメントを作成できます。このための 1 つの方法は、Application.Version プロパティを使用して Office のバージョンを確認することです。値が "12" (2007 Office アプリケーション用) 未満の場合は、コマンド バー コードを実行します。Fluent UI XML マークアップは、2007 Office アプリケーションで作成されたドキュメントを Office 2003 アプリケーションで開くことができるようにするコンバータにより無視されます。値が "12" の場合、特殊な処理を行う必要はありません。Fluent UI XML マークアップを含むファイルは、Office Open XML Formats ファイルから読み込まれ、コールバックを利用できるようになります。

拡張を使用してステータス バーを制御できません。ステータス バーをプログラムで非表示にするにはどうすればいいですか?

次のコードを使用してステータス バーを非表示にすることができます。

Application.CommandBars("Status Bar").Visible = False

同じグループまたはタブに項目を追加する 2 つのアドインを作成するにはどうすればいいですか?

複数のアドインでカスタム タブやグループなどのコンテナを共有できるようにする、コントロールの idQ プロパティがあります。

次の VBA の例では、2 つの Excel アドインがアドイン タブの同じ "Contoso" グループを共有しています。各アドインは 1 つのボタンをタブに追加します。この操作の鍵は、<customUI> タグに同じ一意の名前空間を指定することです。次に、コントロールは idQ を使用してこの名前空間を参照できます。

アドイン 1 の CustomUI

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" 
  xmlns:x="myNameSpace" >
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group idQ="x:Contoso" label="Contoso">
          <button id="C1" label="Contoso Button 1" size="large" 
            imageMso="FileSave" onAction="c_action1" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

アドイン 2 の CustomUI

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" 
  xmlns:x="myNameSpace" >
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group idQ="x:Contoso" label="Contoso">
          <button id="C2" label="Contoso Button 2" size="large" 
            imageMso="FileSave" onAction="c_action2" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

COM アドインを使用して Fluent UI をカスタマイズする場合、名前空間名は COM アドインの ProgID である必要がありますが、動作は同じです。共有アドインを使用する場合、ProgID は AddInName.Connect です。Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office system (Visual Studio 2005 Tools for Office Second Edition) を使用してアドインを作成する場合、ProgID はアドインの名前です。

キー ヒントをコントロールに割り当てるにはどうすればいいですか?

キー ヒントは、Alt キーを押したときにリボン上に表示されるキーボード ショートカットです。keytip および getKeytip 属性を使用して、独自のキー ヒントを割り当てることができます。(getKeytip 属性には、キー ヒントを提供するコールバック プロシージャを指定します)。

注意

キー ヒントが組み込みコントロールまたは他のアドインのキー ヒントと競合する場合は、競合しない値がキー ヒントに自動的に割り当てられます。通常、グループのキー ヒントは文字 "Z" で始まる必要があります。

(VBA のみ) 2 つのドキュメントが同じコールバック シグネチャを持つ場合、アクティブなドキュメントからのコールバックが呼び出されます。UI ドキュメントに関連付けられたコールバックのみが UI で呼び出されるようにするにはどうすればいいですか?

これは、Office 2003 でも存在していた問題です。対策として、アドイン名またはソリューション名をコールバック名に追加することで、コールバック名を一意にすることができます。また、コールバックをモジュールに配置し、プロシージャのフル ネームを使用してコールバックを参照することもできます。たとえば、コールバックを "MyAddInXYZ" という名前のモジュールに配置し、"MyAddInXYZ.myCallback" を使用してコールバックを参照できます。

VBA から Fluent UI コントロールを対話操作できますか?

Application.CommandBars クラスには、Fluent UI コントロールを対話操作するための以下のメソッドが用意されています。

表 1. Application.CommandBars クラスのメソッド

メソッド

説明

Sub ExecuteMso(idMso As String)

idMso で指定されたコマンドを実行します。

Function GetImageMso(idMso As String, Width As Long, Height As Long) As IPictureDisp

idMso で指定されたコマンドのイメージを返し、Width および Height で指定された寸法にサイズを変更します。(これは処理中にのみ機能し、Office 2003 のピクチャとマスクと同様です)。

Function GetLabelMso(idMso As String) As String

Function GetLabelMso(idMso As String) As String

Function GetLabelMso(idMso As String) As String

要求されたコントロールのプロパティを String として返します。

Function GetEnabledMso(idMso as String) as Boolean

Function GetEnabledMso(idMso as String) as Boolean

Function GetVisibleMso(idMso as String) as Boolean

組み込みコントロールの状態をブール値として返します。

各種アプリケーションのリボンのリボン ID を判定するにはどうすればいいですか?

次の表は、各種アプリケーションのリボン ID の一覧です。各アプリケーションは、この ID を IRibbonExtensibility インターフェイスの getCustomUI メソッド内のソリューションに渡します。これにより、アプリケーション (またはアドイン) はコードを読み込んだアプリケーションを判定できます。また、ユーザーはホスト アプリケーションの ID に応じて、異なるセットの XML コンテンツを返すことができます。

表 2. アプリケーション別のリボン ID

アプリケーション

リボン ID

Access

Microsoft.Access.Database

Excel

Microsoft.Excel.Workbook

PowerPoint

Microsoft.PowerPoint.Presentation

Word

Microsoft.Word.Document

Outlook

Microsoft.Word.Document

Microsoft.Outlook.Mail.Read

Microsoft.Outlook.Mail.Compose

Microsoft.Outlook.MeetingRequest.Read

Microsoft.Outlook.MeetingRequest.Send

Microsoft.Outlook.Appointment

Microsoft.Outlook.Contact

Microsoft.Outlook.Journal

Microsoft.Outlook.Task

Microsoft.Outlook.DistributionList

Microsoft.Outlook.Report

Microsoft.Outlook.Resend

Microsoft.Outlook.Response.Read

Microsoft.Outlook.Response.Compose

Microsoft.Outlook.Response.CounterPropose

Microsoft.Outlook.RSS

Microsoft.Outlook.Post.Read

Microsoft.Outlook.Post.Compose

Microsoft.Outlook.DistributionList

Microsoft.Outlook.Report

Microsoft.Outlook.Resend

Microsoft.Outlook.Response.Read

Microsoft.Outlook.Response.Compose

Microsoft.Outlook.Response.CounterPropose

Microsoft.Outlook.Response.CounterPropose

Microsoft.Outlook.RSS

Microsoft.Outlook.Post.Read

Microsoft.Outlook.Post.Compose

Microsoft.Outlook.Sharing.Read

Microsoft.Outlook.Sharing.Compose

拡張ヒントにイメージを追加できますか?

いいえ。Supertip プロパティを使用して追加できるのはテキストのみです。

拡張ヒントで新しい行を開始するにはどうすればいいですか?

新しい行を開始する場所に次の文字コードを入力します。

&#13;

修飾 ID (idQ) を持つコントロールを無効にするにはどうすればいいですか?

次のように、コールバック プロシージャを呼び出して、コントロールの ID を渡すことができます。

idQ="x:test_idq" とします。

次のメソッドを使用してコールバックを呼び出します。

InvalidateControl("test_idq")

注意

COM アドインを使用して Fluent UI をカスタマイズする場合は、例に示す x 名前空間を、コールバック プロシージャを含むアドインの ProgID に設定する必要があります。そうでない場合、コールバックがどのアドインを呼び出したらよいか不明なため、コールバックと InvalidateControl は機能しません。

別のアドインからは、(コールバックやコントロールがそのアドインの XML で idQ を使用して指定されていたとしても) コールバックを設定したり、コントロールを無効にしたりすることはできません。ProgID 名前空間を持つアドインのみがコールバックを取得し、コントロールを無効にすることができます。

COM アドインに Shim を記述するにはどうすればいいですか?

詳細については、MSDN の記事「Isolating Office Extensions with the COM Shim Wizard」を参照してください。

大きなメニュー項目を表示するにはどうすればいいですか?

Fluent UI XML ファイルの <menu> タグで、itemSize="large" を設定します。itemSize 属性をサポートする要素の場合は、値を large に設定して、項目を大きく表示します (通常サイズの項目には、値を normal に設定します)。

名前は同じでシグネチャが異なる 2 つのコールバックを設定できますか?

可能ですが、コントロールごとに別のコールバックを設定すること (および 2 つのコールバックを区別するために組み込みのオーバーロードに頼らないこと) をお勧めします。たとえば、次のコードのように、名前が同じ 2 つのコールバックを指定した Fluent UI アドインを記述したとします。

public void doSomething(IRibbonControl control, bool pressState);
public void doSomething(IRibbonControl control);

さらに、XML マークアップに toggleButton コントロールと button コントロールが定義されていて、どちらにも onAction="doSomething" コールバックが指定されているとします。

この場合、toggleButton コントロールだけが機能します。これは、Visual Basic と Visual C# で自動生成される IDispatch が実装されるためです。C++ のアドインを作成して独自に IDispatch を実装すれば、どちらのコントロールも機能します。(これはお勧めできません)。

コールバック プロシージャごとに正しいシグネチャを判定するにはどうすればいいですか?

次の表は、C++、VBA、C#、および Visual Basic のすべてのロールバックとそのプロシージャ シグネチャの一覧です。

表 3. C#、VBA、C++、および Visual Basic のコールバックとシグネチャ一覧

コントロール

コールバック名

シグネチャ

(複数のコントロール)

getDescription

C#: string GetDescription(IRibbonControl control)

VBA: Sub GetDescription(control As IRibbonControl, ByRef description)

C++: HRESULT GetDescription([in] IRibbonControl *pControl, [out, retval] BSTR *pbstr Description)

Visual Basic: Function GetDescription(control As IRibbonControl) As String

(複数のコントロール)

getEnabled

C#: bool GetEnabled(IRibbonControl control)

VBA: Sub GetEnabled(control As IRibbonControl, ByRef enabled)

C++: HRESULT GetEnabled([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfEnabled)

Visual Basic: Function GetEnabled(control as IRibbonControl) As Boolean

(複数のコントロール)

getImage

C#: IPictureDisp GetImage(IRibbonControl control)

VBA: Sub GetImage(control As IRibbonControl, ByRef image)

C++: HRESULT GetImage([in] IRibbonControl *pControl, [out, retval] IPictureDisp ** ppdispImage)

Visual Basic: Function GetImage(control as IRibbonControl) as IPictureDisp

(複数のコントロール)

getImageMso

C#: string GetImageMso(IRibbonControl control)

VBA: Sub GetImageMso(control As IRibbonControl, ByRef imageMso)

C++: HRESULT GetImageMso([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrImageMso)

Visual Basic: Function GetImageMso(control as IRibbonControl) as String

(複数のコントロール)

getLabel

C#: string GetLabel(IRibbonControl control)

VBA: Sub GetLabel(control As IRibbonControl, ByRef label)

C++: HRESULT GetLabel([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrLabel)

Visual Basic: Function GetLabel(control As IRibbonControl) As String

(複数のコントロール)

getKeytip

C#: string GetKeytip(IRibbonControl control)

VBA: Sub GetKeytip (control As IRibbonControl, ByRef label)

C++: HRESULT GetKeytip ([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrKeytip)

Visual Basic: Function GetKeytip (control As IRibbonControl) As String

(複数のコントロール)

getSize

C#: RibbonControlSize GetSize(IRibbonControl control)

VBA: sub GetSize(control As IRibbonControl, ByRef size)

C++: HRESULT GetSize([in] IRibbonControl *pControl, [out, retval] RibbonControlSize *pintSize)

Visual Basic: Function GetSize(control As IRibbonControl) As RibbonControlSize

(複数のコントロール)

getScreentip

C#: string GetScreentip(IRibbonControl control)

VBA: Sub GetScreentip(control As IRibbonControl, ByRef screentip)

C++: HRESULT GetScreentip([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrScreentip)

Visual Basic: Function GetScreentip(control As IRibbonControl) As String

(複数のコントロール)

getSupertip

C#: string GetSupertip(IRibbonControl control)

VBA: Sub GetScreentip(control As IRibbonControl, ByRef screentip)

C++: HRESULT GetSupertip([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrScreentip)

Visual Basic: Function GetSupertip(control As IRibbonControl) As String

(複数のコントロール)

getVisible

C#: bool GetVisible(IRibbonControl control)

VBA: Sub GetVisible(control As IRibbonControl, ByRef visible)

C++: HRESULT GetVisible([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfVisible)

Visual Basic: Function GetVisible(control As IRibbonControl) As Boolean

button

getShowImage

C#: bool GetShowImage(IRibbonControl control)

VBA: Sub GetShowImage (control As IRibbonControl, ByRef showImage)

C++: HRESULT GetShowImage ([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarShowImage)

Visual Basic: Function GetShowImage (control As IRibbonControl) As Boolean

button

getShowLabel

C#: bool GetShowLabel(IRibbonControl control)

VBA: Sub GetShowLabel (control As IRibbonControl, ByRef showLabel)

C++: HRESULT GetShowLabel ([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarShowLabel)

Visual Basic: Function GetShowLabel (control As IRibbonControl) As Boolean

button

onAction – 再利用

C#: void OnAction(IRibbonControl control, ref bool CancelDefault)

VBA: Sub OnAction(control As IRibbonControl, byRef CancelDefault)

C++: HRESULT OnAction([in] IRibbonControl *pControl, [in,out] VARIANT _BOOL *fCancelDefault)

Visual Basic: Sub OnAction(control As IRibbonControl, byRef CancelDefault)

button

onAction

C#: void OnAction(IRibbonControl control)

VBA: Sub OnAction(control As IRibbonControl)

C++: HRESULT OnAction([in] IRibbonControl *pControl)

Visual Basic: Sub OnAction(control As IRibbonControl)

checkBox

getPressed

C#: bool GetPressed(IRibbonControl control)

VBA: Sub GetPressed(control As IRibbonControl, ByRef returnValue)

C++: HRESULT GetPressed([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfPressed)

Visual Basic: Function GetPressed(control As IRibbonControl) As Boolean

checkBox

onAction

C#: void OnAction(IRibbonControl control, bool pressed)

VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean)

C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed)

Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean)

comboBox

getItemCount

C#: int GetItemCount(IRibbonControl control)

VBA: Sub GetItemCount(control As IRibbonControl, ByRef count)

C++: HRESULT GetItemCount([in] IRibbonControl *pControl, [out, retval] long *count)

Visual Basic: Function GetItemCount(control As IRibbonControl) As Integer

comboBox

getItemID

C#: string GetItemID(IRibbonControl control, int index)

VBA: Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)

C++: HRESULT GetItemID([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrID)

Visual Basic: Function GetItemID(control As IRibbonControl, index As Integer) As String

comboBox

getItemImage

C#: IPictureDisp GetItemImage(IRibbonControl control, int index)

VBA: Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef image)

C++: HRESULT GetItemImage([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] IPictureDisp **ppdispImage)

Visual Basic: Function GetItemImage(control As IRibbonControl, index As Integer) As IPictureDisp

comboBox

getItemLabel

C#: string GetItemLabel(IRibbonControl control, int index)

VBA: Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef label)

C++: HRESULT GetItemLabel([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrLabel)

Visual Basic: Function GetItemLabel(control As IRibbonControl, index As Integer) As String

comboBox

getItemScreenTip

C#: string GetItemScreenTip(IRibbonControl control, int index)

VBA: Sub GetItemScreenTip(control As IRibbonControl, index As Integer, ByRef screentip)

C++: HRESULT GetItemScreentip([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)

Visual Basic: Function GetItemScreentip(control As IRibbonControl, index As Integer) As String

comboBox

getItemSuperTip

C#: string GetItemSuperTip(IRibbonControl control, int index)

VBA: Sub GetItemSuperTip (control As IRibbonControl, index As Integer, ByRef supertip)

C++: HRESULT GetItemSuperTip ([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)

Visual Basic: Function GetItemSuperTip (control As IRibbonControl, index As Integer) As String

comboBox

getText

C#: string GetText(IRibbonControl control)

VBA: Sub GetText(control As IRibbonControl, ByRef text)

C++: HRESULT GetText([in] IRibbonControl *pControl, [out, reval] BSTR *pbstrText)

Visual Basic: Function GetText(control As IRibbonControl) As String

comboBox

onChange

C#: void OnChange(IRibbonControl control, string text)

VBA: Sub OnChange(control As IRibbonControl, text As String)

C++: HRESULT OnChange([in] IRibbonControl *pControl, [in] BSTR *pbstrText)

Visual Basic: Sub OnChange(control As IRibbonControl, text As String)

customUI

loadImage

C#: IPictureDisp LoadImage(string image_id)

VBA: Sub LoadImage(imageId As string, ByRef image)

C++: HRESULT LoadImage([in] BSTR *pbstrImageId, [out, retval] IPictureDisp ** ppdispImage)

Visual Basic: Function LoadImage(imageId As String) As IPictureDisp

customUI

onLoad

C#: void OnLoad(IRibbonUI ribbon)

VBA: Sub OnLoad(ribbon As IRibbonUI)

C++: HRESULT OnLoad([in] IRibbonUI *pRibbon)

Visual Basic: Function OnLoad(ribbon As IRibbonUI)

dropDown

getItemCount

C#: int GetItemCount(IRibbonControl control)

VBA: Sub GetItemCount(control As IRibbonControl, ByRef count)

C++: HRESULT GetItemCount([in] IRibbonControl *pControl, [out, retval] long *count)

Visual Basic: Function GetItemCount(control As IRibbonControl) As Integer

dropDown

getItemID

C#: string GetItemID(IRibbonControl control, int index)

VBA: Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)

C++: HRESULT GetItemID([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrID)

Visual Basic: Function GetItemID(control As IRibbonControl, index As Integer) As String

dropDown

getItemImage

C#: IPictureDisp GetItemImage(IRibbonControl control, int index)

VBA: Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef image)

C++: HRESULT GetItemImage([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] IPictureDisp **ppdispImage)

Visual Basic: Function GetItemImage(control As IRibbonControl, index As Integer) As IPictureDisp

dropDown

getItemLabel

C#: string GetItemLabel(IRibbonControl control, int index)

VBA: Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef label)

C++: HRESULT GetItemLabel([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrLabel)

Visual Basic: Function GetItemLabel(control As IRibbonControl, index As Integer) As String

dropDown

getItemScreenTip

C#: string GetItemScreenTip(IRibbonControl control, int index)

VBA: Sub GetItemScreenTip(control As IRibbonControl, index As Integer, ByRef screenTip)

C++: HRESULT GetItemScreentip([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)

Visual Basic: Function GetItemScreentip(control As IRibbonControl, index As Integer) As String

dropDown

getItemSuperTip

C#: string GetItemSuperTip(IRibbonControl control, int index)

VBA: Sub GetItemSuperTip (control As IRibbonControl, index As Integer, ByRef superTip)

C++: HRESULT GetItemSuperTip ([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrSupertip)

Visual Basic: Function GetItemSuperTip (control As IRibbonControl, index As Integer) As String

dropDown

getSelectedItemID

C#: string GetSelectedItemID(IRibbonControl control)

VBA: Sub GetSelectedItemID(control As IRibbonControl, ByRef index)

C++: HRESULT GetSelectedItemID([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)

Visual Basic: Function GetSelectedItemID(control As IRibbonControl) As Integer

dropDown

getSelectedItemIndex

C#: int GetSelectedItemIndex(IRibbonControl control)

VBA: Sub GetSelectedItemIndex(control As IRibbonControl, ByRef index)

C++: HRESULT GetSelectedItemIndex([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)

Visual Basic: Function GetSelectedItemIndex(control As IRibbonControl) As Integer

dropDown

onAction

C#: void OnAction(IRibbonControl control, string selectedId, int selectedIndex)

VBA: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)

C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] BSTR *selectedId, [in] LONG cSelectedIndex)

Visual Basic: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)

dynamicMenu

getContent

C#: string GetContent(IRibbonControl control)

VBA: Sub GetContent(control As IRibbonControl, ByRef content)

C++: HRESULT GetContent([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrContent)

Visual Basic: Function GetContent(control As IRibbonControl) As String

editBox

getText

C#: string GetText(IRibbonControl control)

VBA: Sub GetText(control As IRibbonControl, ByRef text)

C++: HRESULT GetText([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrText)

Visual Basic: Function GetText(control As IRibbonControl) As String

editBox

onChange

C#: void OnChange(IRibbonControl control, string text)

VBA: Sub OnChange(control As IRibbonControl, text As String)

C++: HRESULT OnChange([in] IRibbonControl *pControl, [in] BSTR *pbstrText)

Visual Basic: Sub OnChange(control As IRibbonControl, text As String)

gallery

getItemCount

C#: int GetItemCount(IRibbonControl control)

VBA: Sub GetItemCount(control As IRibbonControl, ByRef count)

C++: HRESULT GetItemCount([in] IRibbonControl *pControl, [out, retval] long *count)

Visual Basic: Function GetItemCount(control As IRibbonControl) As Integer

gallery

getItemHeight

C#: int getItemHeight(IRibbonControl control)

VBA: Sub getItemHeight(control As IRibbonControl, ByRef height)

C++: HRESULT getItemHeight([in] IRibbonControl *pControl, [out, retval] LONG *height)

Visual Basic: Function getItemHeight(control As IRibbonControl) As Integer

gallery

getItemID

C#: string GetItemID(IRibbonControl control, int index)

VBA: Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)

C++: HRESULT GetItemID([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrID)

Visual Basic: Function GetItemID(control As IRibbonControl, index As Integer) As String

gallery

getItemImage

C#: IPictureDisp GetItemImage(IRibbonControl control, int index)

VBA: Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef image)

C++: HRESULT GetItemImage([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] IPictureDisp **ppdispImage)

Visual Basic: Function GetItemImage(control As IRibbonControl, index As Integer) As IPictureDisp

gallery

getItemLabel

C#: string GetItemLabel(IRibbonControl control, int index)

VBA: Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef label)

C++: HRESULT GetItemLabel([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrLabel)

Visual Basic: Function GetItemLabel(control As IRibbonControl, index As Integer) As String

gallery

getItemScreenTip

C#: string GetItemScreenTip(IRibbonControl control, int index)

VBA: Sub GetItemScreenTip(control As IRibbonControl, index as Integer, ByRef screen)

C++: HRESULT GetItemScreentip([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)

Visual Basic: Function GetItemScreentip(control As IRibbonControl, index As Integer) As String

gallery

getItemSuperTip

C#: string GetItemSuperTip(IRibbonControl control, int index)

VBA: Sub GetItemSuperTip (control As IRibbonControl, index as Integer, ByRef screen)

C++: HRESULT GetItemSuperTip ([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrSupertip)

Visual Basic: Function GetItemSuperTip (control As IRibbonControl, index As Integer) As String

gallery

getItemWidth

C#: int getItemWidth(IRibbonControl control)

VBA: Sub getItemWidth(control As IRibbonControl, ByRef width)

C++: HRESULT getItemWidth([in] IRibbonControl *pControl, [out, retval] LONG *width)

Visual Basic: Function getItemWidth(control As IRibbonControl) As Integer

gallery

getSelectedItemID

C#: int GetSelectedItemID(IRibbonControl control)

VBA: Sub GetSelectedItemID(control As IRibbonControl, ByRef index)

C++: HRESULT GetSelectedItemID([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)

Visual Basic: Function GetSelectedItemID(control As IRibbonControl) As Integer

gallery

getSelectedItemIndex

C#: int GetSelectedItemIndex(IRibbonControl control)

VBA: Sub GetSelectedItemIndex(control As IRibbonControl, ByRef index)

C++: HRESULT GetSelectedItemIndex([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)

Visual Basic: Function GetSelectedItemIndex(control As IRibbonControl) As Integer

gallery

onAction

C#: void OnAction(IRibbonControl control, string selectedId, int selectedIndex)

VBA: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)

C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] BSTR *selectedId, [in] LONG cSelectedIndex)

Visual Basic: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)

menuSeparator

getTitle

C#: string GetTitle(IRibbonControl control)

VBA: Sub GetTitle (control As IRibbonControl, ByRef title)

C++: HRESULT GetTitle ([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrTitle)

Visual Basic: Function GetTitle (control As IRibbonControl) As String

toggleButton

getPressed

C#: bool GetPressed(IRibbonControl control)

VBA: Sub GetPressed(control As IRibbonControl, ByRef returnValue)

C++: HRESULT GetPressed([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfPressed)

Visual Basic: Function GetPressed(control As IRibbonControl) As Boolean

toggleButton

onAction - 再利用

C#: void OnAction(IRibbonControl control, bool pressed, ref bool cancelDefault)

VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef cancelDefault)

C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed, [in,out] VARIANT _BOOL *fCancelDefault)

Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef CancelDefault)

toggleButton

onAction

C#: void OnAction(IRibbonControl control, bool pressed)

VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean)

C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed)

Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean)

各リボン属性が示す内容を調べるにはどうすればいいですか?

次の表はすべてのリボン属性とその説明の一覧です。

表 4. リボン属性

属性

型/値

説明

description

文字列

itemSize 属性を large に設定したときにメニューに表示される説明のテキストを指定します。

enabled

true、false、0、1

コントロールが有効かどうかを指定します。

getContent

コールバック

動的メニューの場合、メニューを説明する XML コンテンツを取得します。

getDescription

コールバック

コントロールの説明を取得します。

getEnabled

コールバック

コントロールの有効状態を取得します。

getImage

コールバック

このコントロールのイメージを取得します。

getImageMso

コールバック

コントロール ID を使用して組み込みコントロールのアイコンを取得します。

getItemCount

コールバック

コンボ ボックス、ドロップダウン リスト、またはギャラリーの場合、表示される項目数を取得します。

getItemID

コールバック

コンボ ボックス、ドロップダウン リスト、またはギャラリーの場合、特定の項目の ID を取得します。

getItemImage

コールバック

コンボ ボックス、ドロップダウン リスト、またはギャラリーの場合、特定の項目のイメージを取得します。

getItemLabel

コールバック

コンボ ボックス、ドロップダウン リスト、またはギャラリーの場合、特定の項目のラベルを取得します。

getItemScreentip

コールバック

コンボ ボックス、ドロップダウン リスト、またはギャラリーの場合、特定の項目のヒントを取得します。

getItemSupertip

コールバック

コンボ ボックス、ドロップダウン リスト、またはギャラリーの場合、特定の項目の拡張ヒントを取得します。

getKeytip

コールバック

コントロールのキー ヒントを取得します。

getLabel

コールバック

コントロールのラベルを取得します。

getPressed

コールバック

トグル ボタンの場合、トグル ボタンが押されているかどうかを示す値を取得します。

チェック ボックスの場合、チェック ボックスがオンになっているかどうかを示す値を取得します。

getScreentip

コールバック

コントロールのヒントを取得します。

getSelectedItemID

コールバック

ドロップダウン リストまたはギャラリーの場合、選択された項目の ID を取得します。

getSelectedItemIndex

コールバック

ドロップダウン リストまたはギャラリーの場合、選択された項目のインデックスを取得します。

getShowImage

コールバック

コントロール イメージを表示するかどうかを指定する値を取得します。

getShowLabel

コールバック

コントロール ラベルを表示するかどうかを指定する値を取得します。

getSize

コールバック

コントロールのサイズを指定する値 (normal または large) を取得します。

getSupertip

コールバック

コントロールの拡張ヒントを指定する値を取得します。

getText

コールバック

テキスト ボックスまたは編集ボックスの場合、コントロールの編集部分に表示されるテキストを取得します。

getTitle

コールバック

メニュー セパレータの場合、(横の線ではなく) 表示されるテキストを取得します。

getVisible

コールバック

コントロールが表示されるかどうかを指定する値を取得します。

id

文字列

コントロールの一意のユーザー定義 ID (idMso と idQ は相互に排他的です。いずれかの値を指定してください)。

idMso

コントロール ID

組み込みのコントロール ID (id と idQ は相互に排他的です。いずれかの値を指定してください)。

idQ

修飾された ID

名前空間 ID を前に付けた修飾コントロール ID (id と idMso は相互に排他的です。いずれかの値を指定してください)。

image

文字列

コントロールのイメージを指定します。(VBA では、この値はリレーションシップ ID です)。

imageMso

コントロール ID

組み込みイメージの ID を指定します。これにより Fluent UI はコントロールのアイコンをコピーします。

insertAfterMso

コントロール ID

このコントロールをその後に配置する、組み込みコントロールの ID を指定します。

insertAfterQ

修飾された ID

このコントロールをその後に配置する、修飾されたコントロール (idQ プロパティを指定したコントロール) の ID を指定します。

insertBeforeMso

コントロール ID

このコントロールをその前に配置する、組み込みコントロールの ID を指定します。

insertBeforeQ

修飾された ID

このコントロールをその前に配置する、修飾されたコントロール (idQ プロパティを指定したコントロール) の ID を指定します。

itemSize

large、normal

メニューの場合、メニュー内の項目のサイズを指定します。

keytip

文字列

このコントロールのキー ヒントを指定します。キー ヒントは、Alt キーと一緒に 3 つの文字のいずれかを押したときに表示されます。

label

文字列

コントロールのラベルを指定します。

onAction

コールバック

このコントロールをクリックしたときに呼び出されます。

onChange

コールバック

編集ボックスまたはコンボ ボックスでユーザーがテキストを確定すると呼び出されます。

screentip

文字列

コントロールのヒントを指定します。

showImage

true、false、0、1

コントロールのイメージを表示するかどうかを指定します。

showItemImage

true、false、0、1

コンボ ボックス、ドロップダウン リスト、またはギャラリーで、各項目のイメージを表示するかどうかを指定します。

showItemLabel

true、false、0、1

コンボ ボックス、ドロップダウン リスト、またはギャラリーで、各項目のラベルを表示するかどうかを指定します。

showLabel

true、false、0、1

コントロールのラベルを表示するかどうかを指定します。

size

large、normal

このコントロールのサイズを指定します。

sizeString

文字列

"MMMMM" など、コントロールの幅を示す文字列を指定します。

supertip

文字列

コントロールの拡張ヒント (通常、ヒントのより長く、完全な形式をいいます) を指定します。

tag

文字列

他の特定のプロパティに関係していないコントロールについての情報を格納できるようにするユーザー定義テキストを指定します。

title

文字列

メニュー セパレータの場合、(横の線ではなく) 表示されるテキストを指定します。

visible

true、false、0、1

コントロールが表示されるかどうかを指定します。

XML ファイルまたはアドインを直接使用して Fluent UI をカスタマイズするときに、一貫したエンドユーザー エクスペリエンスを作成する方法についてのガイダンスを探しています。何か役に立ちますか?

Microsoft ダウンロード センターで 2007 Office system ガイダンス ドキュメント『UI Style Guide for Solutions and Add-Ins (英語)』をダウンロードできます。

カスタム Fluent UI でテキスト ボックスを整列 (右揃えまたは左揃え) することはできますか?

いいえ。ただし、ボックス コントロールを使用することで、同様の効果が得られる可能性があります。horizontal または vertical に設定できる boxStyle 属性を持つ、他のコントロール用のコンテナです。

複数のマクロを含むテンプレートから作成したドキュメントがあります。リボン onAction コールバックからマクロを呼び出そうとしましたが、うまくいきませんでした。オリジナル マクロを変更しないで、リボン コントロールから既存のマクロを呼び出すにはどうすればいいですか?

Office の旧バージョン用に作成されたマクロを、コントロールへの参照を含むようにマクロを変更しないでリボン コントロールから呼び出すことはできません。ただし、対処方法があります。すべてのリボン コールバックをホストするマクロを含む新しいモジュールを作成することができます。リボン コントロールから新しいマクロが呼び出されると、旧マクロが呼び出されます。次のコードで例を示します。

新しい RibbonX モジュール

Sub RibbonX_macroname(control as IRibbonControl)
   Select Case control 
      button1
         macroname1
      button2
         macroname2
   End Select
End Sub

コンボ ボックス コントロールの指定されたインデックスまたは項目 ID を取得するにはどうすればいいですか?

onChange コールバックは選択された文字列を返します。次のコードは、シグネチャを示しています。

Sub OnChange(control as IRibbonControl, text as String)

コンボ ボックスの値が選択されるたびに、onChange コールバックはそのテキストを受け取ります。ただし、選択されている項目のインデックスを取得することはできません。

コールバックが呼び出される順序を予測または制御することはできますか?

いいえ。特定の順序で呼び出されるコールバックに依存するロジックを Fluent UI ソリューションに追加してはいけません。

コマンドバー コントロールを使用するアプリケーションでは、任意の文字列を格納するために Tag プロパティが役に立っていました。IRibbonControl.Tag プロパティを Fluent UI ソリューションで使用するにはどうすればいいですか?

2007 Microsoft Office アプリケーションでは、Tag プロパティを使用しません。このため、IRibbonControl.Tag を使用して任意の文字列を格納し、実行時にこれらの文字列を取得できます。XML では、次のコードに示すようにタグを設定できます。

<button id="mybutton" tag="some string" onAction="MyFunction"/>

MyFunction を呼び出すと、"ある種の文字列" になる IRibbonControl.Tag プロパティを取得できます。

通常、IRibbonControl.Id プロパティを使用してコントロール間を区別できますが、含まれる ID には制限があります (英数字以外は使用できません。また、すべて一意である必要があります)。Tag プロパティには、これらの制限がありません。このため、Id プロパティが機能しない、以下のような状況で使用できます。

  • tag="C:\path\to\my\file.xlsm" のように、ファイル名など、コントロールで特殊な文字列を格納する必要がある場合

  • 複数のコントロールをコールバックで同じように扱いたいが、すべての ID (一意であることが必要) の一覧を持つ必要がない場合。たとえば、異なるタブですべて tag="blue" を設定したボタンを持ち、コールバックの一部のアクションで ID の代わりに Tag プロパティを確認することができます。

[挿入] タブのイラスト グループの [チャート] ボタンと同様に、ヒントや拡張ヒントにイメージを表示できますか?

いいえ。Fluent UI 拡張では現在サポートされていません。

Outlook 2007 用に定義されたカスタム リボンと Word 2007 用に定義された別のリボンがあるとします。電子メール エディタに Word を使用した場合、電子メール メッセージの作成または編集時にどのリボンが表示されますか?

新しい Inspector 型を作成した場合、Outlook は GetCustomUI メソッドを呼び出し、引数としてリボン ID を渡します。Outlook が Word API を使用しても、これは Outlook コンテナであり、Outlook リボンを使用します。

まとめ

ここでは、顧客のニーズに合わせたプロフェッショナルなソリューションを作成するときに必要な情報を提供しています。「2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 1/3)」に示すカスタマイズ サンプルは、顧客の利便性にとって最も重要なコントロールやオプションを配置する UI 作成の起点として使用できます。「2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 2/3)」のリファレンス情報は、Fluent UI の外観を詳細に制御する方法について説明しています。この記事では、独自のカスタマイズ Fluent UI を作成するときに生じる可能性がある多くの質問について答えています。これらの記事で示している情報を独自のアプリケーションに適用することで、競争相手に打ち勝つ、革新的で魅力的なソリューションを作成できます。

追加情報

この記事に記載されている製品およびテクノロジの詳細については、以下の追加情報を参照してください。