Visual Components 是在 Windows 版 FRE 中實作的。
ABBYY FineReader Engine Visual Components 提供的大部分功能,都可透過其快顯功能表和工具列 (如有) 來使用。快顯功能表和工具列中提供的命令,對大多數常見使用情境都很實用。不過,您可能需要自訂其中的元素,以符合您的工作需求。
工具列適用於 Image Viewer、Text Editor 及 Document Viewer。您可以在工具列中新增按鈕,也可以移除多餘的按鈕。這些按鈕既可以是預先定義的按鈕,也可以是您自行建立的按鈕。
快顯功能表適用於 Image Viewer、Zoom Viewer、Text Editor 及 Document Viewer。每個元件的快顯功能表都包含標準部分和自訂部分:
- 快顯功能表的標準部分,是元件預設顯示的快顯功能表。這部分無法變更。您只能控制是否顯示這部分的功能表。
- 快顯功能表的自訂部分可供編輯。預設情況下為空。您可以將該元件可用的任何標準命令,或任何使用者自訂命令新增至快顯功能表的這部分。快顯功能表的自訂部分一律顯示在標準部分之後。快顯功能表的自訂部分也可啟用或停用。
您可以在 MenuItemEnum 列舉中的常數內,找到 Visual Components 中所有可用命令的完整清單。ImageViewer、ZoomViewer、DocumentViewer 和 TextEditor 物件的 Commands 子物件,可讓您存取各元件中可用的命令。
這些命令可透過以下方式執行:
- 從快顯功能表中選取項目,
- 按一下工具列按鈕,
- 按下快速鍵,
- 使用元件之 Commands 子物件的 DoCommand 方法。
不過,並非每個命令都能使用上述所有方式。請參閱各元件中的可用命令清單,以及這些命令在各元件中的使用方式:
若要啟用或停用命令,請使用 Commands 物件的 EnableCommand 或 DisableCommand 方法。如果您停用某個命令,該命令的所有可用執行方式都將無法使用。
部分預先定義命令預設會顯示在工具列上,其他則可由開發人員新增至元件的工具列。請參閱各元件可用的預先定義命令清單。
若要將預先定義命令新增至工具列或將其移除:
- 透過元件的 Toolbar 屬性取得 Toolbar 物件。
- 使用 Toolbar 物件的 InsertAt 方法,將命令插入工具列中的指定位置;或使用 Delete 或 DeleteAt 方法將其移除。
您可以使用分隔線將工具列上的按鈕分組。請使用 Toolbar 物件的 InsertAt 方法,並將 MI_Separator 常數作為參數。
// 將預定義命令 MI_InvertImage 新增到 Image Viewer 工具列的開頭
private FineReaderVisualComponents.AxImageViewer imageViewer;
imageViewer.Toolbar.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_InvertImage, 0);
新增預先定義命令後,即可在應用程式中使用。ABBYY FineReader Engine 會處理對應的事件。您也可以使用 ICommandEvents 介面的 OnCommand 事件,為處理常式補充其他功能。
部分預先定義的命令預設可在快顯功能表中使用,這些命令構成快顯功能表的標準部分。元件中可用的其他預先定義命令,則可加入快顯功能表的自訂部分。
若要將預先定義的命令加入快顯功能表的自訂部分或將其移除:
- 透過元件的 PopupMenu 屬性取得 PopupMenu 物件。
- 如果不需要使用快顯功能表的整個標準部分,請使用 PopupMenu 物件的 StandardMenuEnabled 屬性將其停用。標準部分預設為啟用狀態。
- 使用 PopupMenu 物件的 CustomMenuEnabled 屬性啟用快顯功能表的自訂部分。
- 使用 PopupMenu 物件的 InsertAt 方法,將命令插入快顯功能表自訂部分中的指定位置;或使用 Delete 或 DeleteAt 方法將其移除。
您可以使用分隔線將快顯功能表自訂部分中的項目分組。請使用 PopupMenu 物件的 InsertAt 方法,並將 MI_Separator 常數作為參數。
// 我們將預先定義的命令 MI_InvertImage 新增到 Image Viewer 快顯功能表自訂部分的開頭
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),並想好命令文字。接著,您應在元件中註冊該命令,然後將其新增至工具列或快顯功能表的自訂部分。詳情如下。
若要新增使用者命令:
- 在元件中註冊該命令。使用元件的 Commands 子物件之 RegisterUserCommand 方法,並將任一 MI_CustomCommand1, … MI_CustomCommand10 常數作為參數。您也應在此方法的參數中指定圖示路徑、命令文字和快速鍵。
快速鍵由兩個部分組成:虛擬鍵碼和按鍵修飾鍵 (Ctrl、Alt、Shift)。當您將快速鍵傳遞給 FineReader Engine 方法時,其格式應與 Windows SendMessage 函式在傳送 HKM_GETHOTKEY 訊息時所傳回的值 (LRESULT) 相同。若要取得此格式的快速鍵值,您應將快速鍵的虛擬鍵碼打包到該值的低位元組中,並將用來指定快速鍵組合按鍵的修飾鍵打包到高位元組中。如果您不需要為該命令使用快速鍵,請將 0 作為此方法的參數傳遞。
- 實作 ICommandEvents 介面的 OnCommand 事件,讓它處理新命令的事件。請參閱 使用可連接物件。
- 將命令新增至元件的工具列或快顯功能表自訂部分。此程序與工具列或快顯功能表的預先定義命令相同。
完成後,您就可以在應用程式中使用該命令。
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 )
{
...
}
}
若要移除先前新增的使用者命令:
- 將其從工具列或快顯功能表的自訂部分中移除。此程序與工具列或快顯功能表的預先定義命令相同。
- 取消註冊該命令。使用元件的 Commands 子物件之 UnregisterUserCommand 方法。
建立具有圖形使用者介面的應用程式