Personalización del menú contextual y la barra de herramientas de un componente visual
Visual Components están implementados en FRE for Windows.
Se puede acceder a la mayor parte de la funcionalidad que ofrecen los Visual Components de ABBYY FineReader Engine mediante su menú contextual y su barra de herramientas (si existe). Los comandos disponibles en el menú contextual y en la barra de herramientas resultan útiles en la mayoría de los escenarios de uso habituales. Sin embargo, puede que necesite personalizar sus elementos para adaptarlos a su tarea.La barra de herramientas está disponible para Image Viewer, Text Editor, Document Viewer. Puede agregar nuevos botones a la barra de herramientas y quitar los innecesarios. Los botones pueden ser predefinidos o creados por usted.El menú contextual está disponible para Image Viewer, Zoom Viewer, Text Editor, Document Viewer. El menú contextual de cada componente tiene una parte estándar y una parte personalizada:
La parte estándar del menú contextual es la que se muestra en el componente de forma predeterminada. Esta parte no puede modificarse. Solo puede mostrarse u ocultarse.
La parte personalizada del menú contextual puede editarse. De forma predeterminada, está vacía. Puede agregar a esta parte del menú contextual cualquiera de los comandos estándar disponibles para el componente o cualquier comando definido por el usuario. La parte personalizada del menú contextual siempre se muestra después de la parte estándar. La parte personalizada del menú contextual también puede habilitarse o deshabilitarse.
Puede consultar la lista completa de comandos disponibles en Visual Components en las constantes de la enumeración MenuItemEnum. Los subobjetos Commands de los objetos ImageViewer, ZoomViewer, DocumentViewer, TextEditor proporcionan acceso a los comandos disponibles en cada componente.Los comandos se pueden ejecutar de las siguientes maneras:
seleccionando un elemento de un menú contextual,
haciendo clic en un botón de la barra de herramientas,
presionando una tecla de acceso rápido,
usando el método DoCommand del subobjeto Commands de un componente.
Sin embargo, no todos estos métodos están disponibles para todos los comandos. Consulte la lista de comandos disponibles y las formas en que pueden utilizarse en cada componente:
Para habilitar o deshabilitar un comando, use el método EnableCommand o DisableCommand del objeto Commands. Si deshabilita un comando, ninguno de los métodos disponibles para ejecutarlo funcionará.
Añadir comandos predefinidos a la barra de herramientas
Algunos de los comandos predefinidos están disponibles en la barra de herramientas de forma predeterminada; otros puede agregarlos el desarrollador a la barra de herramientas de un componente. Consulte las listas de comandos predefinidos disponibles para cada componente.Para añadir un comando predefinido a una barra de herramientas o eliminarlo:
Obtenga el objeto Toolbar mediante la propiedad Toolbar del componente.
Inserte el comando en la posición seleccionada de la barra de herramientas con el método InsertAt del objeto Toolbar, o elimínelo con el método Delete o DeleteAt.
Puede agrupar los botones de la barra de herramientas mediante separadores. Use el método InsertAt del objeto Toolbar con la constante MI_Separator como parámetro.
Código C#
// Añadimos el comando predefinido MI_InvertImage al principio de la barra de herramientas de Image Viewerprivate FineReaderVisualComponents.AxImageViewer imageViewer;imageViewer.Toolbar.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_InvertImage, 0);
Una vez añadido el comando predefinido, puede usarse en la aplicación. ABBYY FineReader Engine gestiona los eventos correspondientes. Puede complementar el controlador con funcionalidad adicional mediante el evento OnCommand de la interfaz ICommandEvents.
Algunos de los comandos predefinidos están disponibles en el menú contextual de forma predeterminada; estos comandos constituyen la parte estándar del menú contextual. Todos los demás comandos predefinidos disponibles en el componente pueden añadirse a la parte personalizada del menú contextual.Para añadir un comando predefinido a la parte personalizada de un menú contextual o quitarlo:
Obtenga el objeto PopupMenu mediante la propiedad PopupMenu del componente.
Deshabilite toda la parte estándar del menú contextual mediante la propiedad StandardMenuEnabled del objeto PopupMenu si no necesita usarla. De forma predeterminada, la parte estándar está habilitada.
Habilite la parte personalizada del menú contextual mediante la propiedad CustomMenuEnabled del objeto PopupMenu.
Inserte un comando en la posición seleccionada de la parte personalizada del menú contextual mediante el método InsertAt del objeto PopupMenu, o quítelo mediante el método Delete o DeleteAt.
Puede agrupar los elementos de la parte personalizada del menú contextual mediante separadores. Use el método InsertAt del objeto PopupMenu con la constante MI_Separator como parámetro.
Código C#
// Añadimos el comando predefinido MI_InvertImage al principio de la parte personalizada del menú contextual de Image Viewerprivate FineReaderVisualComponents.AxImageViewer imageViewer;imageViewer.PopupMenu.StandardMenuEnabled = false;imageViewer.PopupMenu.CustomMenuEnabled = true;imageViewer.PopupMenu.InsertAt(FineReaderVisualComponents.MenuItemEnum.MI_InvertImage, 0);
Una vez añadido el comando predefinido, puede utilizarse en la aplicación. ABBYY FineReader Engine controla los eventos correspondientes. Puede complementar el controlador con funcionalidad adicional mediante el evento OnCommand de la interfaz ICommandEvents.
También puede crear sus propios comandos y agregarlos a una barra de herramientas o a un menú contextual. La enumeración MenuItemEnum incluye las constantes (MI_CustomCommand1, … MI_CustomCommand10), que pueden usarse para definir sus propios comandos.Antes de agregar un comando personalizado, debe crear un icono (16х16 px) para su botón de la barra de herramientas y definir el texto del comando. Después, debe registrar el comando en el componente y agregarlo a la barra de herramientas o a la parte personalizada del menú contextual. Consulte los detalles a continuación.Para agregar un comando de usuario:
Registre el comando en el componente. Use el método RegisterUserCommand del subobjeto Commands del componente con cualquiera de las constantes MI_CustomCommand1, … MI_CustomCommand10 como parámetro. También debe especificar la ruta al icono, el texto del comando y la tecla de acceso rápido en los parámetros de este método.
La tecla de acceso rápido consta de dos partes: el código de tecla virtual y los modificadores de tecla (Ctrl, Alt, Shift). Cuando pasa una tecla de acceso rápido a un método de FineReader Engine, esta debe tener el mismo formato que el valor devuelto (LRESULT) por la función SendMessage de Windows para el mensaje HKM_GETHOTKEY enviado. Para obtener el valor de la tecla de acceso rápido con este formato, debe empaquetar el código de tecla virtual en el byte de orden bajo del valor y el modificador de tecla que especifica las teclas que definen una combinación de teclas de acceso rápido en el byte de orden alto. Si no necesita usar una tecla de acceso rápido para el comando, pase 0 como parámetro del método.
Agregue el comando a la barra de herramientas o a la parte personalizada del menú contextual del componente. El procedimiento es el mismo que para los comandos predefinidos de una barra de herramientas o de un menú contextual.
Después de esto, el comando podrá usarse en su aplicación.
Código C#
private FineReaderVisualComponents.AxImageViewer imageViewer;private FineReaderVisualComponents.AxTextEditor textEditor;private const int HotkeyShift = 1;private const int HotkeyControl = 2;private const int HotkeyAlt = 4;// Creación del valor de la tecla de acceso rápidoprivate int makeWord(int keyCode, int modifierFlags){ return (int)((uint)((byte)(keyCode)) | ((uint)((byte)(modifierFlags)) << 8));}// Adición de comandos personalizadosprivate 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); …}// Controlador del evento OnCommand del Visor de imágenesprivate void imageViewer_OnCommand( FineReaderVisualComponents.MenuItemEnum command, out bool cancel ){ if( command == FineReaderVisualComponents.MenuItemEnum.MI_CustomCommand1 ) { ... }}
Para eliminar un comando de usuario agregado previamente:
Elimínelo de la barra de herramientas o de la parte personalizada del menú contextual. El procedimiento es el mismo que para los comandos predefinidos de una barra de herramientas o de un menú contextual.
Anule el registro del comando. Use el método UnregisterUserCommand del subobjeto Commands del componente.