Office Web コンポーネントのメニューとツールバーのカスタマイズ

Michael Stowe
Microsoft Corporation

April 2001

対象 :
   MicrosoftR Office XP Web コンポーネント

概要 : Office XP Web コンポーネントは既定のツールバーと ショートカット メニューをカスタマイズできます。 この記事では、組み込みのツールバーとショートカット メニューをカスタマイズする方法を説明するいくつかの 例を提供します。

MSDN Online Code Center (英語) で odc_ocWebCustmUI.exe サンプル コードを参照してください。

目次

はじめに
ショートカット メニューのカスタマイズ
ツールバーのカスタマイズ
まとめ

はじめに

Office XP Web コンポーネントでは、既定のツールバーおよびショートカット メニューをカスタマイズ できます。この記事では、組み込みのツールバーとショートカット メニューをカスタマイズする方法を説明するいくつかの 例を提供します。次のトピックが含まれています。

  • カスタマイズされたショートカット メニューの作成。

  • 既定のショートカット メニューの変更。

  • ショートカット メニューへのサブメニューの追加。

  • 組み込みコマンドを使ったツールバーのカスタマイズ。

  • ツールバーへのカスタム コマンドの追加。

ショートカット メニューのカスタマイズ

Office Web コンポーネントのショートカット メニューをカスタマイズするには、 BeforeContextMenu イベントおよび CommandExecute イベントを使って作業する必要があります。 BeforeContextMenu プロシージャにカスタマイズするショートカット メニューを作成するコードを記述します。 CommandExecute イベントでカスタム メニュー エントリを処理するコードを記述します。.

カスタム メニューの作成

Office Web コンポーネントのショートカット メニューは、ネストされた配列で構成されます。 メニュー自体はメニューのコマンド リストを含む 1 次元の配列です。 各コマンドは 2 次元の配列です。 最初の次元は、メニューに表示するキャプションを持ちます。 2 番目の次元は、表示されるコマンドへの参照を持ちます。 組み込みのコマンドを参照するか、あとでメニュー選択を処理するときに使用するコマンドに名前を割り当てます。

独自のメニューを持つ配列を作成した後は、 Menu 変数の Value プロパティ を配列に設定します。 自動的に BeforeContextMenu イベントに渡される Menu 変数は、 Web コンポーネントのメニューを参照します。

1 つだけカスタム コマンドを持つショートカット メニューを表示する方法を示す例を参照するには、 ダウンロードしたサンプルの Custom Menu 1.htm ファイルをご覧ください。(任意のセル上で右クリックをして、動作を確認できます)

組み込みコマンドをショートカット メニューに含める

カスタム ショートカット メニューにコマンドを作成するだけでなく、 ショートカット メニューで組み込みコマンドを参照できます。 組み込みコマンドは、それぞれ組み込み定数に対応しています。 OCCommandIdChartCommandIdEnumPivotCommandId、 および SpreadsheetCommandId 定数は、各 Office Web コンポーネントでサポートされる コマンドのリストを持っています。 オブジェクト ブラウザを使用して、定数ごとのコマンドのリストを表示できます。

組み込みコマンドを参照するには、カスタム メニュー コマンドの配列の 2 次元目で定数を参照します。 これを行う方法は 2 つあります。 1 つ目の方法は、配列の 2 番目の次元として定数の Long 値を含めることです。 もう 1 つの方法は、コマンドの先頭に文字列 owc を付けた定数の名前を参照することです。 以下の例はこの 2 つの等価な方法を示しています。 この例では、ショートカット メニューとして使用する配列に Copy コマンドを追加しています。 この例は、owcContants という変数が Office Web コンポーネントの定数に初期化されていることを前提としている ことに注意してください。

vntMyMenu(0) = Array("&Copy", 1002)
vntMyMenu(0) = Array("&Copy", "owc" & owcConstants.ocCommandCopy)

組み込みコマンドを持つショートカット メニューを表示する方法を示す例を参照するには、 ダウンロードしたサンプルの Custom Menu 2.htm ファイルをご覧ください。

ショートカット メニューにサブメニューを作成する

カスタム ショートカット メニューにサブメニューを追加することにより、 独立した選択肢のセットを作成するのではなく、コマンドの関連するセットをグループ化できます。 サブメニューは単にメニュー内のメニューです。 サブメニューを作成するには、サブメニューのコマンドを持つ配列を作成し、 その配列を最上位レベルのメニューの項目に渡します。

サブメニューを持つショートカット メニューを表示する方法を示す例を参照するには、 ダウンロードしたサンプルの Custom Menu 3.htm ファイルをご覧ください。

既定のショートカット メニューへのコマンドの追加

状況によっては、メニュー全体を独自に作成する代わりに、コマンドを 1 つか 2 つ既存のショートカット メニューに 追加したいことがあります。 このアプローチの主な利点は、メニューに既に存在する組み込みコマンドを処理するコードを記述する必要がないことです。

これを行うには、既存のメニューを配列に代入し、Preserve キーワードと共に ReDim ステートメントを使用して、配列のサイズを変更します。 配列のサイズが変更された後に、コマンドを追加できます。

既定のショートカット メニューにコマンドを追加する方法を示す例を参照するには、 ダウンロードしたサンプルの Custom Menu 4.htm ファイルをご覧ください。

カスタム メニューへのセパレータの追加

サブメニューを作成せずに関連するコマンドをグループ化する場合は、セパレータが役に立ちます。 セパレータを作成するには、メニュー配列のメンバに Empty キーワードを設定します。

ショートカット メニューにセパレータを追加する方法を示す例を参照するには、 同じくダウンロードしたサンプルの Custom Menu 4.htm ファイルをご覧ください。

メニュー クリックの処理

ショートカット メニューを作成した後は、ユーザーがメニュー項目を選択したときに何を行うかを決定するための コードを記述する必要があります。 このコードは、CommandExecute イベント プロシージャに格納します。

自動的に CommandExecute イベントに渡される Command 引数は、 実行するコマンドを含んでいます。 渡されたコマンドを処理する必要があるかどうかを判断するには、 If..Then ステートメントで Command 引数に対して VarType 関数を使用します。 Command 引数が vbString 型と評価された場合は、 そのコマンドを処理するコードを記述する必要があります。

コマンドを簡単に処理するには、Select Case 構造を実装します。 メニュー配列の各コマンド識別子と Command 引数を比較します。 カスタム コマンドの場合は、単純にそのコマンドを実現するプロシージャを呼び出します。 カスタム メニューに追加した組み込みコマンドの場合は、Execute メソッドを使用してそのコマンドを実行します。

ツールバーのカスタマイズ

各 Office Web コンポーネントにはカスタマイズ可能なツールバーが含まれています。 ただし、Office Web コンポーネント オブジェクト モデルには、ツールバーのカスタマイズに関連するメンバは、 Toolbar プロパティ以外は含まれません。なぜでしょうか ? ツールバーは実際には Microsoft WindowsR コモン コントロールなのです。

ツールバーをカスタマイズするには、Office Web コンポーネント オブジェクト モデル外部のいくつかのプロパティ、 コレクション、およびコントロールを使用する必要があります。 これらには、Toolbar オブジェクト、Buttons コレクション、Button オブジェクト、ImageList コントロール、および ListImages コレクションがあります。

組み込みコマンドをツールバーに追加する

ツールバーに組み込みコマンドを追加するために必要な手順は、 そのコマンドがツールバーの ImageList コントロールに既にアイコンを持っているかどうかによって大きく異なります。

以下のコマンドは、ツールバーまたは Web コンポーネントに関連付けられた ImageList コントロールに 既に格納されています。

表 1. ImageList コントロールに既に存在するコマンド

コマンド コマンド識別子
元に戻す ocCommandUndo
切り取り ocCommandCut
コピー ocCommandCopy
貼り付け ocCommandPaste
コマンドとオプション ocCommandProperties
ヘルプ ocCommandHelp
Excel へエクスポート ocCommandExport
昇順で並べ替え ocCommandSortAsc
降順で並べ替え ocCommanSortDesc
フィールド リスト ocCommandChooser
オートフィルタ ocCommandAutoFilter
オートカルク ocCommandAutoCalc
折りたたみ ocCommandCollapse
展開 ocCommandExpand
最新の情報に更新 ocCommandRefresh
オート SUM ssCommandAutoSum
オートフィルタ (スプレッドシートのみ) ssCommandAutoFilter
すべて更新 ssCommandRefreshAll
小計 plCommandSubtotal
集計全体およびフィールド plCommandCalculated
詳細の非表示 plCommandHideDetails
詳細の表示 plCommandShowDetails
上/下のアイテムの表示 plCommandContditionalFilter
書式設定 plCommandShowAs
凡例を表示する chCommandShowLegend
行/列 chCommandByRowCol
ドリル イン chCommandDrill
ドリル アウト chCommandDrillOut
セレクションの削除 chCommandDeleteSelection
グラフの種類 chCommandChartType
グラフ ウィザード chCommandShowWizard

プレフィックス oc で始まるコマンド識別子は、Office Web コンポーネントの 1 つに適用されますが、 すべてに適用されるわけではありません。 ss で始まるコマンド識別子は、スプレッドシート コンポーネントにのみ適用されます。 pl で始まるコマンド識別子は、ピボットテーブル コンポーネントにのみ適用されます。ch で始まるコマンド識別子は、スプレッドシート コンポーネントにのみ適用されます。

ツールバーの ImageList に既に存在する組み込みコマンドの追加

表 1 に一覧したコマンドは、Office Web コンポーネントの既定のツールバーにリストされるコマンドを表しています。 これらのコマンドの 1 つをツールバーに追加する場合は、 まずツールバーからそのコマンドを削除する必要があります。 つまり、コマンドをツールバーに 2 度追加することはできません。

表 1 に一覧したコマンドの 1 つをツールバーに追加する数少ない状況の 1 つは、 既定のコマンドのごく一部だけをユーザーが利用できるようにする場合です。 たとえば、ピボットテーブル ツールバーからすべてのコマンドを削除し、 [最新の情報に更新] コマンドだけをツールバーに追加します。

イメージ リストに既に存在する組み込みコマンドを追加するには、 Buttons コレクションの Add メソッドを使用します。 Add メソッドの、 indexkey 、および image 引数の 値を指定する必要があります。 index 引数は、新しいボタンのツールバー上の位置を指定します。 index 引数と key 引数には、識別子の先頭に文字列 owc を 付けて、コマンド識別子を指定する必要があります。

表 1 で一覧したコマンドをいくつかツールバーに追加する方法の例を参照するには、 ダウンロードしたサンプルの Custom Toolbar 1.htm ファイルをご覧ください。

ツールバーの ImageList に存在しない組み込みコマンドの追加

表 1 に一覧されていない組み込みコマンドをツールバーに追加するには、 まずコマンドを表す画像をツールバーのイメージ リストに追加する必要があります。 これを行うには、ListImages コレクションの Add メソッドを使用します。 Add メソッドの key 引数と picture 引数の値を指定する必要があります。 key 引数に指定した値は、あとでイメージを識別するために使用します。 ListImages コレクション内で一意なキーとなるテキストを指定できます。

picture 引数に指定する値は、ツールバー ボタンに表示するイメージとして使用します。 LoadPicture 関数を使用して、イメージを ImageList コントロールに読み込みます。

メモ Microsoft JScriptR には LoadPicture 関数は含まれていません。

イメージを ListImages コレクションに追加した後は、 Buttons コレクションの Add メソッドを使用してツールバーにコマンドを追加します。 Add メソッドの、 indexkey 、および image 引数の 値を指定する必要があります。 index 引数は、新しいボタンのツールバー上の位置を指定します。 index 引数には、 識別子の先頭に文字列 owc を付けて、コマンド識別子を指定する必要があります。 key 引数には、ListImages コレクションにコマンドのイメージを追加した ときに key 引数に渡した値を指定します。

表 1 に一覧されない組み込みコマンドを追加する方法の例を参照するには、 ダウンロードしたサンプルの Custom Toolbar 2.htm ファイルをご覧ください。

ツールバーへのカスタム コマンドの追加

ツールバーにカスタム コマンドを追加するために必要な手順は、 イメージ リストに存在しない組み込みコマンドを追加するために必要な手順に非常によく似ています。 まず、ListImages コレクションの Add メソッドを使用する必要があります。 このとき、 key 引数と picture 引数の値を指定します。 次に、Buttons コレクションの Add メソッドを使用してコマンドをツールバーに追加します。 このとき、 indexkey 、および image 引数の値を指定します。 key 引数にコマンドの名前を指定します。

カスタム コマンドをツールバーに追加した後は、ユーザーがメニュー項目を選択したときに何を行うのか決定する コードを記述します。 このコードは、CommandExecute イベント プロシージャに格納します。 カスタム ボタンを処理する方法は、カスタム メニュー コマンドを処理する方法とまったく同じです。 このプロシージャは、この記事の前半の「メニュー クリックの処理」で説明しています。

カスタム コマンドをツールバーに追加する方法の例を参照するには、 ダウンロードしたサンプルの Custom Toolbar 3.htm ファイルをご覧ください。

まとめ

Office XP Web コンポーネントの既定のツールバーやショートカット メニューのカスタマイズは簡単に行えます。 これらをカスタマイズすることにより、ソリューションを配置するときに、 希望するツールバーやショートカットメニューをユーザーに表示できます。