Compartilhar via


Amostra de formulário de papel digitalizado

Neste exemplo de C#, um formulário de papel foi verificado como um arquivo PNG (Portable Network Graphics) e especificado como a imagem de plano de fundo em tempo de execução para um controle InkPicture . O exemplo usa uma caixa de mensagem para exibir os resultados do reconhecimento de manuscrito.

O exemplo inclui um arquivo XML (Extensible Markup Language), Formdata.xml. O arquivo XML contém o nome do arquivo PNG. Ele também contém elementos que definem FieldInfo regiões retangulares no formulário em que um usuário pode inserir tinta. As informações no FieldInfo elemento são mostradas no exemplo a seguir:

    <FieldInfo>
        <Name>first name</Name>
        <Left>88</Left>
        <Top>65</Top>
        <Right>332</Right>
        <Bottom>94</Bottom>
    </FieldInfo>

Os elementos Left, Top, Right e Bottom são definições de coordenadas de pixel para cada campo.

O exemplo inicializa um novo DataSet com os dados contidos no Formdata.xml:

    formData = new DataSet("FormData");
    formData.ReadXml("formdata.xml"); 

A imagem de formulário especificada no Formdata.xml é carregada como a tela de fundo do controle InkPicture :

    inkPicture1.BackgroundImage = 
        System.Drawing.Image.FromFile(
        (string) formData.Tables["FormData"].Rows[0]["Image"]);

A coleção ink é habilitada para o controle InkPicture :

    inkPicture1.InkEnabled = true;

O aplicativo inclui manipuladores de eventos de clique para todos os menus exibidos na parte superior do formulário.

Reconhecer Item de Menu

O manipulador de eventos de clique no menu Reconhecer desabilita a coleção de tinta para o controle e verifica se há um reconhecedor de manuscrito. Se nenhum reconhecedor estiver instalado, uma caixa de diálogo será exibida. Em seguida, um usuário deve clicar na opção de menu Tinta ou Caneta para reabilitar o controle para entrada à tinta.

Se um reconhecedor estiver instalado, a Recognize função recuperará os dados XML que especificam coordenadas de pixel para cada campo de formulário. As coordenadas são convertidas em coordenadas de espaço à tinta e um retângulo é definido para cada campo de formulário. Depois que os retângulos são definidos, a função localiza os traços que se cruzam e ficam dentro de cada retângulo. Por fim, ele executa o reconhecimento na tinta e exibe os resultados em uma caixa de mensagem.

Item de menu à tinta

O manipulador de eventos de clique do menu Tinta habilita o controle InkPicture .

Item de menu caneta

O manipulador de eventos de clique no menu Caneta executa as seguintes tarefas:

  • Desabilita a coleção de tinta para o controle InkPicture (que é necessário antes de alterar a propriedade EditingMode ).
  • Define a propriedade EditingMode para coletar tinta.
  • Habilita novamente a coleção de tinta para o controle InkPicture e alterna os menus Caneta, Seleção e Borracha para indicar o modo ativo.

Editar Item de Menu

O manipulador de eventos Editar clique no menu é semelhante ao manipulador de eventos de menu Caneta. Ele executa as seguintes tarefas:

  • Desabilita a coleção de tinta.
  • Define a propriedade EditingMode como Select, que permite que o usuário execute a seleção de tinta.
  • Habilita novamente a coleção de tinta e alterna os menus Caneta, Edição e Borracha para indicar o modo ativo.

Item de menu borracha

O manipulador de eventos de clique do menu Borracha define o controle InkPictureEditingMode como Delete, o que permite que um usuário apague a tinta. Ele também alterna os itens de menu Caneta, Edição e Borracha.

Limpar Item de Menu

O manipulador de eventos Limpar clique no menu exclui a coleção Strokes atual para o controle InkPicture , apagando assim toda a tinta no formulário.

Fechando o formulário

No Windows Form Designer código gerado, o controle InkPicture é adicionado à lista de componentes do formulário quando o formulário é inicializado. Quando o formulário é fechado, o controle InkPicture é descartado, bem como os outros componentes do formulário, pelo método Dispose do formulário.

Controle InkEdit

Controle InkPicture