自定义可视化组件的上下文菜单和工具栏
通过上下文菜单和工具栏(如有)可以访问到ABBYY FineReader Engine 可视化组件中提供的大多数功能。上下文菜单和工具栏中的命令可用于大多数常用场景。但您可能需要根据任务需要自定义它们的元素。
工具栏 在 Image Viewer、Text Editor 和 Document Viewer 中均有提供。您既可以向工具栏中添加新按钮,也可以从中删除多余的按钮。按钮既可以是预定义的,也可以是已创建的。
上下文菜单 在 Image Viewer、Zoom Viewer、Text Editor 和 Document Viewer 中均有提供。每个组件的上下文菜单有一个标准部分和一个自定义部分:
- 上下文菜单的 标准部分是在组件中默认显示的上下文菜单。这部分不能更改。您只能显示或隐藏这部分菜单。
- 上下文菜单的 自定义 部分可以进行编辑。该部分默认为空。您可以向这部分上下文菜单添加任何可供组件使用的标准命令或者任何用户定义的命令。上下文菜单的自定义部分始终显示在标准部分之后。也可以启用或禁用上下文菜单的自定义部分。
管理可用的命令
如需可用的完整命令列表,可在 MenuItemEnum 枚举常量的可视组件中查找。TextEditor、ImageViewer、ZoomViewer 和 DocumentViewer 对象的 Commands 子对象可提供对每个组件中可用命令的访问。
可用以下方式调用命令:
- 从上下文菜单中选择一项,
- 单击工具栏按钮,
- 按下热键,
- 使用组件的 Commands 子对象的 DoCommand 方法。
不过,并非所有这些方法都对命令可用。请参见可用命令列表,以及这些命令在每个组件中的使用方式:
要启用或禁用命令,可使用 Commands 对象的 EnableCommand 或 DisableCommand 方法。如果禁用某个命令,则该命令可用的所有调用方法均无效。
向工具栏添加预定义命令
有些预定义命令默认可在工具栏上出现,其它的可以由开发人员添加到组件的工具栏。查看可供每个组件使用的预定义命令。
要向工具栏添加或从其删除一个预定义命令:
注: 您可以使用分隔符来分组工具栏上的按钮。使用 Toolbar 对象的 InsertAt 方法,以 MI_Separator 常数为参数。
C# 代码
预定义命令添加后即可在应用程序中使用。ABBYY FineReader Engine 处理相应的事件。通过ICommandEvents 接口的 OnCommand 事件,可以用一些额外功能补充处理程序。
添加预定义命令到上下文菜单
有些预定义命令默认在上下文菜单中出现,这些命令构成上下文菜单的标准部分。可以将组件中可用的所有其他预定义命令添加到上下文菜单的自定义部分。
添加或删除上下文菜单自定义部分的预定义命令:
- 通过组件的 PopupMenu 属性获取 PopupMenu 对象。
- 如果不需要使用,可用 PopupMenu 对象的 StandardMenuEnabled 属性禁用上下文菜单的整个标准部分。默认启用标准部分。
- 使用 PopupMenu 对象的 CustomMenuEnabled 属性启用上下文菜单的自定义部分。
- 使用 PopupMenu 对象的 InsertAt 方法将命令插入上下文菜单自定义部分的所选位置,或使用 Delete 或 DeleteAt 方法将其删除。
注: 您可以使用分隔符来分组上下文菜单自定义部分中的项。使用 PopupMenu对象的 InsertAt 方法,以 MI_Separator 常数为参数。
C# 代码
预定义命令添加后可以在应用程序中使用。ABBYY FineReader Engine 处理相应的事件。您可以通过使用 ICommandEvents 接口的 OnCommand 事件,可以用一些附加函数补充处理程序。
创建用户定义的命令
您也可以创建自己的命令并将它们添加到工具栏或者上下文菜单中。MenuItemEnum 枚举包括常数 (MI_CustomCommand1, ... MI_CustomCommand10),它们可用来定义您自己的命令。
添加自定义命令前,您需要为它的按钮创建一个图标 (16х16 px),并设计命令的文本。然后,您应该在组件中注册命令,将其添加到工具栏或者上下文菜单的自定义部分。详情请见下文。
添加用户命令:
- 在组件中注册命令。通过组件的 Commands 子对象的 RegisterUserCommand 方法实现,并以MI_CustomCommand1, ...MI_CustomCommand10 的任何常量作为参数。您还应该在该方法的参数中指定图标路径、命令文本和热键。
注: 热键由两部分组成:虚拟键代码和键修饰符 (Ctrl, Alt, Shift)。当传递热键到 FineReader Engine 方法时,热键的格式应该与已发 HKM_GETHOTKEY 消息的 Windows SendMessage 函数的返回值 (LRESULT) 相同。若要获得此格式的热键值,应将热键的虚拟键代码打包到该值的低位字节,并将指定定义热键组合的键的键修饰符打包到高位字节。如果不需要为命令使用热键,则需将 0 作为该方法的参数传递。
- 按照处理新命令的事件的顺序实现 ICommandEvents 接口的 OnCommand 事件。请参见可连接对象的处理。
- 将命令添加到组件的工具栏或者上下文菜单的自定义部分。该过程对于工具栏或者上下文菜单的预定义命令相同。
此后命令即可在您的应用程序中使用。
C# 代码
删除之前添加的用户命令:
- 从工具栏或者上下文菜单的自定义部分中删除。此过程与添加预定义命令部分一样。
- 取消注册命令。使用组件的 Commands 子对象的 UnregisterUserCommand 方法。
另请参阅
17.09.2024 15:14:41