Ejemplo de formulario de papel escaneado
En este ejemplo de C#, se ha examinado un formulario de papel como un archivo Portable Network Graphics (PNG) y se ha especificado como la imagen de fondo en tiempo de ejecución para un control InkPicture . En el ejemplo se usa un cuadro de mensaje para mostrar los resultados del reconocimiento de escritura a mano.
El ejemplo incluye un archivo de lenguaje de marcado extensible (XML), Formdata.xml. El archivo XML contiene el nombre del archivo PNG. También contiene FieldInfo
elementos que definen áreas rectangulares en el formulario donde un usuario puede escribir entrada manuscrita. La información del FieldInfo
elemento se muestra en el ejemplo siguiente:
<FieldInfo>
<Name>first name</Name>
<Left>88</Left>
<Top>65</Top>
<Right>332</Right>
<Bottom>94</Bottom>
</FieldInfo>
Los elementos Left, Top, Right y Bottom son definiciones de coordenadas de píxeles para cada campo.
El ejemplo inicializa un nuevo conjunto de datos con los datos contenidos en Formdata.xml:
formData = new DataSet("FormData");
formData.ReadXml("formdata.xml");
La imagen de formulario especificada en Formdata.xml se carga como fondo del control InkPicture :
inkPicture1.BackgroundImage =
System.Drawing.Image.FromFile(
(string) formData.Tables["FormData"].Rows[0]["Image"]);
A continuación, la colección ink está habilitada para el control InkPicture :
inkPicture1.InkEnabled = true;
Controladores de eventos de menú
La aplicación incluye controladores de eventos de clic para todos los menús que se muestran en la parte superior del formulario.
Reconocer elemento de menú
El controlador de eventos de clic en el menú Reconocer deshabilita la colección de entrada de lápiz para el control y comprueba si hay un reconocedor de escritura a mano. Si no hay ningún reconocedor instalado, se muestra un cuadro de diálogo. A continuación, un usuario debe hacer clic en la opción de menú Lápiz o Lápiz para volver a habilitar el control para la entrada de lápiz.
Si se instala un reconocedor, la Recognize
función recupera los datos XML que especifican coordenadas de píxeles para cada campo de formulario. Las coordenadas se convierten en coordenadas de espacio de entrada de lápiz y se define un rectángulo para cada campo de formulario. Una vez definidos los rectángulos, la función busca los trazos que se cruzan y se encuentran dentro de cada rectángulo. Por último, realiza el reconocimiento en la entrada de lápiz y muestra los resultados en un cuadro de mensaje.
Elemento de menú De entrada manuscrita
El controlador de eventos de clic del menú Ink habilita el control InkPicture .
Elemento de menú Lápiz
El controlador de eventos de clic del menú Lápiz realiza las siguientes tareas:
- Deshabilita la colección de entrada de lápiz para el control InkPicture (que es necesario antes de cambiar la propiedad EditingMode ).
- Establece la propiedad EditingMode para recopilar la entrada de lápiz.
- Vuelve a habilitar la colección de tintas para el control InkPicture y alterna los menús Lápiz, Seleccionar y Borrador para indicar el modo activo.
Editar elemento de menú
El controlador de eventos de clic del menú Editar es similar al controlador de eventos del menú Lápiz. Realiza las siguientes tareas:
- Deshabilita la colección de entrada de lápiz.
- Establece la propiedad EditingMode en Select, lo que permite al usuario realizar la selección de entrada de lápiz.
- Vuelve a habilitar la colección de entrada de lápiz y alterna los menús Lápiz, Edición y Borrador para indicar el modo activo.
Elemento de menú Borrador
El controlador de eventos click del menú Borrador establece el control InkPictureEditingMode en Eliminar, lo que permite al usuario borrar la entrada de lápiz. También alterna los elementos de menú Pluma, Edición y Borrador.
Borrar elemento de menú
El controlador de eventos de clic del menú Borrar elimina la colección Strokes actual para el control InkPicture , borrando así toda la entrada de lápiz del formulario.
Cerrar el formulario
En windows Forms Designer código generado, el control InkPicture se agrega a la lista de componentes del formulario cuando se inicializa el formulario. Cuando se cierra el formulario, se elimina el control InkPicture, así como los demás componentes del formulario, mediante el método Dispose del formulario.
Temas relacionados