> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ビジュアルコンポーネントのコンテキストメニューとツールバーをカスタマイズする

> Windows 上の ABBYY FineReader Engine ビジュアルコンポーネントのコンテキストメニューとツールバーをカスタマイズします。コマンドを追加、削除、または置き換えて、ワークフローに合わせて調整できます。

<Warning>
  ビジュアルコンポーネントは、Windows 向け FRE に実装されています。
</Warning>

ABBYY FineReader Engine のビジュアルコンポーネントが提供する機能のほとんどは、コンテキストメニューおよびツールバー (存在する場合) からアクセスできます。コンテキストメニューとツールバーで利用可能なコマンドは、一般的な使用シナリオの大部分に対応しています。ただし、特定のタスクに合わせてこれらの要素をカスタマイズしなければならない場合もあります。

ツールバーは [Image Viewer](/ja/fine-reader/engine/visual-components-reference/imageviewer)、[Text Editor](/ja/fine-reader/engine/visual-components-reference/texteditor)、[Document Viewer](/ja/fine-reader/engine/visual-components-reference/documentviewer) で利用できます。ツールバーには新しいボタンを追加したり、不要なボタンを削除したりできます。ボタンは、あらかじめ定義されたものでも、独自に作成したものでも使用できます。

<img src="https://mintcdn.com/abbyy/i-EfCQVmseNiPQcp/images/fine-reader/engine/toolbar.gif?s=4d3c945dd89dce825bea4deeb04178d8" alt="Toolbar" width="431" height="28" data-path="images/fine-reader/engine/toolbar.gif" />

コンテキストメニューは [Image Viewer](/ja/fine-reader/engine/visual-components-reference/imageviewer)、[Zoom Viewer](/ja/fine-reader/engine/visual-components-reference/zoomviewer)、[Text Editor](/ja/fine-reader/engine/visual-components-reference/texteditor)、[Document Viewer](/ja/fine-reader/engine/visual-components-reference/documentviewer) で利用できます。各コンポーネントのコンテキストメニューには、標準部分とカスタム部分があります。

* コンテキストメニューの標準部分は、コンポーネントにデフォルトで表示されるメニューです。この部分は変更できません。表示・非表示の切り替えのみ可能です。
* コンテキストメニューのカスタム部分は編集可能です。デフォルトでは空の状態です。コンポーネントで利用可能な標準コマンドやユーザー定義コマンドをこの部分に追加できます。カスタム部分は常に標準部分の後に表示されます。また、カスタム部分の有効・無効を切り替えることもできます。

<img src="https://mintcdn.com/abbyy/i-EfCQVmseNiPQcp/images/fine-reader/engine/popupmenu.gif?s=47bde52eabbcbe558d7bdd4cf56fb4a7" alt="PopupMenu" width="239" height="195" data-path="images/fine-reader/engine/popupmenu.gif" />

<div id="managing-available-commands">
  ## 利用可能なコマンドの管理
</div>

ビジュアルコンポーネント で利用できるコマンドの一覧は、列挙定数 [MenuItemEnum](/ja/fine-reader/engine/visual-components-reference/enumerations/menuitemenum) にあります。[ImageViewer](/ja/fine-reader/engine/visual-components-reference/imageviewer)、[ZoomViewer](/ja/fine-reader/engine/visual-components-reference/zoomviewer)、[DocumentViewer](/ja/fine-reader/engine/visual-components-reference/documentviewer)、[TextEditor](/ja/fine-reader/engine/visual-components-reference/texteditor) オブジェクトの [Commands](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/commands) サブオブジェクトからは、各コンポーネントで利用できるコマンドにアクセスできます。

コマンドは、次の方法で実行できます。

* コンテキストメニューから項目を選択する
* ツールバーのボタンをクリックする
* ホットキーを押す
* コンポーネントの Commands サブオブジェクトの [DoCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/commands/docommand-method) メソッドを使用する

ただし、これらの方法のすべてが各コマンドで使用できるとは限りません。利用可能なコマンドの一覧と、各コンポーネントでそれらのコマンドを使用できる方法については、次を参照してください。

* [Image Viewer コマンド](/ja/fine-reader/engine/visual-components-reference/imageviewer/image-viewer-commands)
* [Zoom Viewer コマンド](/ja/fine-reader/engine/visual-components-reference/zoomviewer/zoom-viewer-commands)
* [Document Viewer コマンド](/ja/fine-reader/engine/visual-components-reference/documentviewer/document-viewer-commands)
* [Text Editor コマンド](/ja/fine-reader/engine/visual-components-reference/texteditor/text-editor-commands)

コマンドを有効または無効にするには、Commands オブジェクトの [EnableCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/commands/enablecommand-method) メソッドまたは [DisableCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/commands/disablecommand-method) メソッドを使用します。コマンドを無効にすると、そのコマンドに対して利用可能な実行方法はいずれも機能しなくなります。

<div id="adding-predefined-commands-to-the-toolbar">
  ## ツールバーに定義済みコマンドを追加する
</div>

一部の定義済みコマンドはデフォルトでツールバーに表示されており、他のコマンドは開発者によってコンポーネントのツールバーに追加できます。各コンポーネントで利用可能な定義済みコマンドのリストを参照してください。

定義済みコマンドをツールバーに追加するか、削除するには:

1. コンポーネントの Toolbar プロパティから [Toolbar](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/toolbar) オブジェクトを取得します。
2. Toolbar オブジェクトの [InsertAt](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/toolbar/insertat-method) メソッドを使用して、ツールバーの指定した位置にコマンドを挿入するか、[Delete](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/toolbar/delete-method) または [DeleteAt](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/toolbar/deleteat-method) メソッドを使用して削除します。

<Note>
  区切り線を使用してツールバーのボタンをグループ化できます。Toolbar オブジェクトの InsertAt メソッドを、MI\_Separator 定数をパラメーターとして使用します。
</Note>

<Accordion title="C# コード">
  ```csharp theme={null}
  // Image Viewer のツールバーの先頭に定義済みコマンド MI_InvertImage を追加します
  private FineReaderVisualComponents.AxImageViewer imageViewer;
  imageViewer.Toolbar.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_InvertImage, 0);
  ```
</Accordion>

定義済みコマンドが追加された後、アプリケーションで使用できます。ABBYY FineReader Engine が対応するイベントを処理します。[ICommandEvents](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/icommandevents) インターフェースの [OnCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/icommandevents/oncommand-method) イベントを使用して、ハンドラーを追加の機能で拡張できます。

<div id="adding-predefined-commands-to-the-context-menu">
  ## 定義済みコマンドをコンテキストメニューに追加する
</div>

定義済みコマンドの一部は、既定でコンテキストメニューから使用できます。これらのコマンドは、コンテキストメニューの標準部分を構成します。component で使用可能なその他の定義済みコマンドは、コンテキストメニューのカスタム部分に追加できます。

コンテキストメニューのカスタム部分に定義済みコマンドを追加または削除するには、次の手順に従います。

1. component の PopupMenu プロパティを使用して、[PopupMenu](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/popupmenu) オブジェクトを取得します。
2. 標準部分を使用しない場合は、PopupMenu オブジェクトの [StandardMenuEnabled](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/popupmenu#standardmenuenabled) プロパティを使用して、コンテキストメニューの標準部分全体を無効にします。既定では、標準部分は有効です。
3. PopupMenu オブジェクトの [CustomMenuEnabled](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/popupmenu#custommenuenabled) プロパティを使用して、コンテキストメニューのカスタム部分を有効にします。
4. PopupMenu オブジェクトの [InsertAt](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/popupmenu/insertat-method) メソッドを使用して、コンテキストメニューのカスタム部分の指定した位置にコマンドを挿入するか、[Delete](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/toolbar/delete-method) または [DeleteAt](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/toolbar/deleteat-method) メソッドを使用して削除します。

<Note>
  区切り線を使用して、コンテキストメニューのカスタム部分内の項目をグループ化できます。パラメーターに MI\_Separator 定数を指定して、PopupMenu オブジェクトの InsertAt メソッドを使用します。
</Note>

<Accordion title="C# コード">
  ```csharp theme={null}
  // Image Viewer のコンテキストメニューのカスタム部分の先頭に、定義済みコマンド MI_InvertImage を追加します
  private FineReaderVisualComponents.AxImageViewer imageViewer;
  imageViewer.PopupMenu.StandardMenuEnabled = false;
  imageViewer.PopupMenu.CustomMenuEnabled = true;
  imageViewer.PopupMenu.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_InvertImage, 0);
  ```
</Accordion>

定義済みコマンドを追加すると、アプリケーションで使用できるようになります。対応するイベントは ABBYY FineReader Engine が処理します。[ICommandEvents](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/icommandevents) インターフェイスの [OnCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/icommandevents/oncommand-method) イベントを使用して、ハンドラーに追加機能を実装できます。

<div id="creating-user-defined-commands">
  ## ユーザー定義コマンドの作成
</div>

独自のコマンドを作成し、ツールバーまたはコンテキストメニューに追加することもできます。[MenuItemEnum](/ja/fine-reader/engine/visual-components-reference/enumerations/menuitemenum) 列挙型には、独自のコマンドを定義するために使用できる定数 (MI\_CustomCommand1、...、MI\_CustomCommand10) が含まれています。

カスタムコマンドを追加する前に、ツールバーボタン用のアイコン (16×16 px) を作成し、コマンドのテキストを決定しておく必要があります。次に、コンポーネントにコマンドを登録し、ツールバーまたはコンテキストメニューのカスタムパートに追加します。詳細は以下を参照してください。

ユーザーコマンドを追加するには：

1. コンポーネントにコマンドを登録します。コンポーネントの [Commands](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/commands) サブオブジェクトの [RegisterUserCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/commands/registerusercommand-method) メソッドを使用し、MI\_CustomCommand1、...、MI\_CustomCommand10 のいずれかの定数をパラメーターとして指定します。また、このメソッドのパラメーターには、アイコンへのパス、コマンドのテキスト、およびホットキーも指定する必要があります。

<Note>
  ホットキーは、仮想キーコードとキー修飾子 (Ctrl、Alt、Shift) の 2 つの部分で構成されています。FineReader Engine のメソッドにホットキーを渡す際は、[HKM\_GETHOTKEY](http://msdn.microsoft.com/en-us/library/windows/desktop/bb775235\(v=vs.85\).aspx) メッセージを送信したときの Windows [SendMessage](http://msdn.microsoft.com/en-us/library/ms644950\(VS.85\).aspx) 関数の戻り値 (LRESULT) と同じ形式である必要があります。この形式でホットキーの値を取得するには、ホットキーの仮想キーコードを値の下位バイトに、ホットキーの組み合わせを定義するキーを指定するキー修飾子を上位バイトにパックします。コマンドにホットキーを使用しない場合は、メソッドのパラメーターとして 0 を渡してください。
</Note>

2. 新しいコマンドのイベントを処理できるよう、[ICommandEvents](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/icommandevents) インターフェイスの [OnCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/icommandevents/oncommand-method) イベントを実装します。[コネクタブルオブジェクトの使用](/ja/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/working-with-connectable-objects)を参照してください。
3. コンポーネントのツールバーまたはコンテキストメニューのカスタムパートにコマンドを追加します。手順は、ツールバーまたはコンテキストメニューの定義済みコマンドの場合と同じです。

以上の手順を完了すると、アプリケーションでコマンドを使用できるようになります。

<Accordion title="C# コード">
  ```csharp theme={null}
  private FineReaderVisualComponents.AxImageViewer imageViewer;
  private FineReaderVisualComponents.AxTextEditor textEditor;
  private const int HotkeyShift = 1;
  private const int HotkeyControl = 2;
  private const int HotkeyAlt = 4;
  // ホットキーの値を作成する
  private int makeWord(int keyCode, int modifierFlags)
  {
   return (int)((uint)((byte)(keyCode)) | ((uint)((byte)(modifierFlags)) << 8));
  }
  // カスタムコマンドを追加する
  private void addCommands()
  {
   …
   int hotKey = makeWord((int)Keys.B, HotkeyShift);
   imageViewer.Commands.RegisterUserCommand(FineReaderVisualComponents.MenuItemEnum.MI_CustomCommand1, "MyCommand", "D:\\img.bmp", hotKey);
   imageViewer.Toolbar.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_CustomCommand1, 0);
   imageViewer.Commands.OnCommand += new FineReaderVisualComponents.DICommandEvents_OnCommandEventHandler( imageViewer_OnCommand );
   hotKey = makeWord((int)Keys.T, HotkeyAlt | HotkeyShift);
   textEditor.Commands.RegisterUserCommand(FineReaderVisualComponents.MenuItemEnum.MI_CustomCommand1, "MyTextCommand", "", hotKey);
   …
  }
  // Image Viewer の OnCommand イベントのハンドラー
  private void imageViewer_OnCommand( FineReaderVisualComponents.MenuItemEnum command, out bool cancel ){
   if( command == FineReaderVisualComponents.MenuItemEnum.MI_CustomCommand1 )
   {
    ...
   }
  }
  ```
</Accordion>

以前に追加したユーザーコマンドを削除するには：

1. ツールバーまたはコンテキストメニューのカスタムパートから削除します。手順は、ツールバーまたはコンテキストメニューの定義済みコマンドの場合と同じです。
2. コマンドの登録を解除します。コンポーネントの Commands サブオブジェクトの [UnregisterUserCommand](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/commands/unregisterusercommand-method) メソッドを使用します。

<div id="see-also">
  ## 関連項目
</div>

[グラフィカルユーザーインターフェイスを備えたアプリケーションの作成](/ja/fine-reader/engine/guided-tour/advanced-techniques/using-gui-elements/creating-an-application-with-gui)
