メインコンテンツへスキップ
ビジュアルコンポーネントは、Windows 向け FRE に実装されています。
ABBYY FineReader Engine のビジュアルコンポーネントが提供する機能のほとんどは、コンテキストメニューおよびツールバー (存在する場合) からアクセスできます。コンテキストメニューとツールバーで利用可能なコマンドは、一般的な使用シナリオの大部分に対応しています。ただし、特定のタスクに合わせてこれらの要素をカスタマイズしなければならない場合もあります。 ツールバーは Image ViewerText EditorDocument Viewer で利用できます。ツールバーには新しいボタンを追加したり、不要なボタンを削除したりできます。ボタンは、あらかじめ定義されたものでも、独自に作成したものでも使用できます。 Toolbar コンテキストメニューは Image ViewerZoom ViewerText EditorDocument Viewer で利用できます。各コンポーネントのコンテキストメニューには、標準部分とカスタム部分があります。
  • コンテキストメニューの標準部分は、コンポーネントにデフォルトで表示されるメニューです。この部分は変更できません。表示・非表示の切り替えのみ可能です。
  • コンテキストメニューのカスタム部分は編集可能です。デフォルトでは空の状態です。コンポーネントで利用可能な標準コマンドやユーザー定義のコマンドをこの部分に追加できます。カスタム部分は常に標準部分の後に表示されます。また、カスタム部分の有効・無効を切り替えることもできます。
PopupMenu

利用可能なコマンドの管理

ビジュアルコンポーネント で利用できるコマンドの一覧は、列挙定数 MenuItemEnum にあります。ImageViewerZoomViewerDocumentViewerTextEditor オブジェクトの Commands サブオブジェクトからは、各コンポーネントで利用できるコマンドにアクセスできます。 コマンドは、次の方法で実行できます。
  • コンテキストメニューから項目を選択する
  • ツールバーのボタンをクリックする
  • ホットキーを押す
  • コンポーネントの Commands サブオブジェクトの DoCommand メソッドを使用する
ただし、これらの方法のすべてが各コマンドで使用できるとは限りません。利用可能なコマンドの一覧と、各コンポーネントでそれらのコマンドを使用できる方法については、次を参照してください。 コマンドを有効または無効にするには、Commands オブジェクトの EnableCommand メソッドまたは DisableCommand メソッドを使用します。コマンドを無効にすると、そのコマンドに対して利用可能な実行方法はいずれも機能しなくなります。

ツールバーに定義済みコマンドを追加する

一部の定義済みコマンドはデフォルトでツールバーに表示されており、他のコマンドは開発者によってコンポーネントのツールバーに追加できます。各コンポーネントで利用可能な定義済みコマンドのリストを参照してください。 定義済みコマンドをツールバーに追加するか、削除するには:
  1. コンポーネントの Toolbar プロパティから Toolbar オブジェクトを取得します。
  2. Toolbar オブジェクトの InsertAt メソッドを使用して、ツールバーの指定した位置にコマンドを挿入するか、Delete または DeleteAt メソッドを使用して削除します。
区切り線を使用してツールバーのボタンをグループ化できます。Toolbar オブジェクトの InsertAt メソッドを、MI_Separator 定数をパラメーターとして使用します。
// Image Viewer のツールバーの先頭に定義済みコマンド MI_InvertImage を追加します
private FineReaderVisualComponents.AxImageViewer imageViewer;
imageViewer.Toolbar.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_InvertImage, 0);
定義済みコマンドが追加された後、アプリケーションで使用できます。ABBYY FineReader Engine が対応するイベントを処理します。ICommandEvents インターフェースの OnCommand イベントを使用して、ハンドラーを追加の機能で拡張できます。

定義済みコマンドをコンテキストメニューに追加する

定義済みコマンドの一部は、既定でコンテキストメニューから使用できます。これらのコマンドは、コンテキストメニューの標準部分を構成します。component で使用可能なその他の定義済みコマンドは、コンテキストメニューのカスタム部分に追加できます。 コンテキストメニューのカスタム部分に定義済みコマンドを追加または削除するには、次の手順に従います。
  1. component の PopupMenu プロパティを使用して、PopupMenu オブジェクトを取得します。
  2. 標準部分を使用しない場合は、PopupMenu オブジェクトの StandardMenuEnabled プロパティを使用して、コンテキストメニューの標準部分全体を無効にします。既定では、標準部分は有効です。
  3. PopupMenu オブジェクトの CustomMenuEnabled プロパティを使用して、コンテキストメニューのカスタム部分を有効にします。
  4. PopupMenu オブジェクトの InsertAt メソッドを使用して、コンテキストメニューのカスタム部分の指定した位置にコマンドを挿入するか、Delete または DeleteAt メソッドを使用して削除します。
区切り線を使用して、コンテキストメニューのカスタム部分内の項目をグループ化できます。パラメーターに MI_Separator 定数を指定して、PopupMenu オブジェクトの InsertAt メソッドを使用します。
// Image Viewer のコンテキストメニューのカスタム部分の先頭に、定義済みコマンド MI_InvertImage を追加します
private FineReaderVisualComponents.AxImageViewer imageViewer;
imageViewer.PopupMenu.StandardMenuEnabled = false;
imageViewer.PopupMenu.CustomMenuEnabled = true;
imageViewer.PopupMenu.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_InvertImage, 0);
定義済みコマンドを追加すると、アプリケーションで使用できるようになります。対応するイベントは ABBYY FineReader Engine が処理します。ICommandEvents インターフェイスの OnCommand イベントを使用して、ハンドラーに追加機能を実装できます。

ユーザー定義コマンドの作成

独自のコマンドを作成し、ツールバーまたはコンテキストメニューに追加することもできます。MenuItemEnum 列挙型には、独自のコマンドを定義するために使用できる定数 (MI_CustomCommand1、…、MI_CustomCommand10) が含まれています。 カスタムコマンドを追加する前に、ツールバーボタン用のアイコン (16×16 px) を作成し、コマンドのテキストを決定しておく必要があります。次に、コンポーネントにコマンドを登録し、ツールバーまたはコンテキストメニューのカスタムパートに追加します。詳細は以下を参照してください。 ユーザーコマンドを追加するには:
  1. コンポーネントにコマンドを登録します。コンポーネントの Commands サブオブジェクトの RegisterUserCommand メソッドを使用し、MI_CustomCommand1、…、MI_CustomCommand10 のいずれかの定数をパラメーターとして指定します。また、このメソッドのパラメーターには、アイコンへのパス、コマンドのテキスト、およびホットキーも指定する必要があります。
ホットキーは、仮想キーコードとキー修飾子 (Ctrl、Alt、Shift) の 2 つの部分で構成されています。FineReader Engine のメソッドにホットキーを渡す際は、HKM_GETHOTKEY メッセージを送信したときの Windows SendMessage 関数の戻り値 (LRESULT) と同じ形式である必要があります。この形式でホットキーの値を取得するには、ホットキーの仮想キーコードを値の下位バイトに、ホットキーの組み合わせを定義するキーを指定するキー修飾子を上位バイトにパックします。コマンドにホットキーを使用しない場合は、メソッドのパラメーターとして 0 を渡してください。
  1. 新しいコマンドのイベントを処理できるよう、ICommandEvents インターフェイスの OnCommand イベントを実装します。コネクタブルオブジェクトの使用を参照してください。
  2. コンポーネントのツールバーまたはコンテキストメニューのカスタムパートにコマンドを追加します。手順は、ツールバーまたはコンテキストメニューの定義済みコマンドの場合と同じです。
以上の手順を完了すると、アプリケーションでコマンドを使用できるようになります。
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 )
 {
  ...
 }
}
以前に追加したユーザーコマンドを削除するには:
  1. ツールバーまたはコンテキストメニューのカスタムパートから削除します。手順は、ツールバーまたはコンテキストメニューの定義済みコマンドの場合と同じです。
  2. コマンドの登録を解除します。コンポーネントの Commands サブオブジェクトの UnregisterUserCommand メソッドを使用します。

関連項目

グラフィカルユーザーインターフェイスを備えたアプリケーションの作成