Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O exemplo de preenchimento automático demonstra como implementar o preenchimento automático de caracteres em japonês usando as interfaces de programação de aplicativos (APIs) de reconhecimento.
Os seguintes recursos são usados neste exemplo:
- Usando um coletor de tinta
- Usando um contexto do reconhecedor
Inicializando o contexto do coletor de tinta e do reconhecedor
Os objetos InkCollector e InkRecognizerContext são declarados como classes que podem gerar eventos.
Dim WithEvents ic As InkCollector
Dim WithEvents rc As InkRecognizerContext
O manipulador de eventos Load do formulário cria um coletor de tinta, associa o coletor de tinta à caixa de imagem e habilita a coleta de tinta. Em seguida, o manipulador de eventos carrega o reconhecedor japonês padrão e inicializa as propriedades Guide e Strokes do contexto do reconhecedor.
Private Sub Form_Load()
' Set the ink collector to work in the small frame window
Set ic = New InkCollector ic.hWnd = fraBox.hWnd ic.Enabled = True
' Get the Japanese recognizer
LoadRecognizer
' Initialize the recognizer context
Dim Guide As New InkRecognizerGuide
Dim FrameRectangle As New InkRectangle
Dim Top As Long
Dim Bottom As Long
Dim Left As Long
Dim Right As Long
Top = 0
Left = 0
Bottom = fraBox.ScaleHeight
Right = fraBox.ScaleWidth
ic.Renderer.PixelToInkSpace Me.hdc, Top, Left
ic.Renderer.PixelToInkSpace Me.hdc, Bottom, Right
FrameRectangle.Bottom = Bottom
FrameRectangle.Top = Top
FrameRectangle.Left = Left
FrameRectangle.Right = Right
Guide.Columns = 1
Guide.Rows = 1
Guide.Midline = -1 ' Do not use midline
Guide.DrawnBox = FrameRectangle
Guide.WritingBox = FrameRectangle
Set rc.Guide = Guide
' Set the strokes collection on the recognizer context
Set ink = ic.ink Set rc.Strokes = ic.ink.Strokes
End Sub
Carregando o reconhecedor japonês padrão
O GetDefaultRecognizer método do InkRecognizers é chamado para recuperar o reconhecedor padrão para o idioma japonês. Em seguida, é verificada a propriedade Idiomas do objeto IInkRecognizer para determinar se o reconhecedor suporta o idioma japonês. Se isso acontecer, o métodoCreateRecognizerContext do reconhecedor será usado para gerar um contexto de reconhecedor para o formulário.
Private Sub LoadRecognizer()
On Error GoTo NoRecognizer
' Get a Japanese recognizer context
Dim recos As New InkRecognizers
Dim JapaneseReco As IInkRecognizer
Set JapaneseReco = recos.GetDefaultRecognizer(&H411)
If JapaneseReco Is Nothing Then
MsgBox "Japanese Recognizers are not installed on this system. Exiting."
End
End If
' Check that this is indeed a Japanese recognizer
Dim IsJapanese As Boolean
Dim lan As Integer
IsJapanese = False
For lan = LBound(JapaneseReco.Languages) To UBound(JapaneseReco.Languages)
If JapaneseReco.Languages(lan) = &H411 Then
IsJapanese = True
End If
Next lan
If Not IsJapanese Then
MsgBox "Japanese Recognizers are not installed on this system. Exiting."
End
End If
Set rc = JapaneseReco.CreateRecognizerContext
Exit Sub
NoRecognizer:
MsgBox "Japanese Recognizers are not installed on this system. Exiting."
End
End Sub
Manipulando o Evento de Traço
O manipulador de eventos Stroke primeiro interrompe o reconhecimento em segundo plano no contexto do reconhecedor. Em seguida, ele adiciona o novo traçado à propriedadeStrokes do contexto do reconhecedor. Finalmente, ele define a propriedade InkRecognizerCharacterAutoCompletionMode do contexto do reconhecedor e chama o método BackgroundRecognizeWithAlternates do contexto do reconhecedor para cada um dos três modos de autocompletar de caracteres. O parâmetro CustomData da chamada do método BackgroundRecognizeWithAlternates é usado para identificar quais resultados de reconhecimento são retornados no evento RecognitionWithAlternates.
Private Sub ic_Stroke(ByVal Cursor As MSINKAUTLib.IInkCursor, ByVal Stroke As MSINKAUTLib.IInkStrokeDisp, Cancel As Boolean)
' Stop the unfinished recognition processes
rc.StopBackgroundRecognition
' Add the new stroke
rc.Strokes.Add Stroke
' Get a result for all three CAC modes
rc.CharacterAutoCompletionMode = IRCACM_Full rc.BackgroundRecognizeWithAlternates 0 rc.CharacterAutoCompletionMode = IRCACM_Prefix rc.BackgroundRecognizeWithAlternates 1 rc.CharacterAutoCompletionMode = IRCACM_Random rc.BackgroundRecognizeWithAlternates 2
End Sub
Manipulando o reconhecimento com eventos alternativos
O manipulador do evento RecognitionWithAlternates primeiro verifica o parâmetro RecognitionStatus. Se houver um erro no reconhecimento, o manipulador de eventos ignorará os resultados do reconhecimento. Caso contrário, o manipulador de eventos adiciona o parâmetro RecognitionResult à caixa de imagem apropriada e salva a cadeia de resultado. O parâmetro CustomData é definido na chamada para o método BackgroundRecognizeWithAlternates e identifica qual modo de Autocompletar de caracteres foi utilizado pelo contexto do reconhecedor.
Private Sub rc_RecognitionWithAlternates(ByVal RecognitionResult As MSINKAUTLib.IInkRecognitionResult, ByVal vCustomParam As Variant, ByVal RecognitionStatus As MSINKAUTLib.InkRecognitionStatus)
' Get the alternates from the recognition result
' and display them in the right place
Dim ResultString As String
Dim alts As IInkRecognitionAlternates
Dim alt As IInkRecognitionAlternate
On Error GoTo EndFunc
If RecognitionStatus = IRS_NoError Then
' Fill a string with all the characters for this CAC mode
Set alts = RecognitionResult.AlternatesFromSelection
For Each alt In alts
ResultString = ResultString + alt.String
Next alt
' Display the string
Dim r As RECT
r.Left = 0
r.Top = 0
r.Right = 1000
r.Bottom = 1000
PctResult(vCustomParam).Cls
DrawText PctResult(vCustomParam).hdc, StrPtr(ResultString), Len(ResultString), r, 0
If vCustomParam = 0 Then
FullCACText = ResultString
Else
If vCustomParam = 1 Then
PrefixCACText = ResultString
Else
If vCustomParam = 2 Then
RandomCACText = ResultString
End If
End If
End If
End If
Exit Sub
EndFunc:
MsgBox Err.Description
End Sub
Pintando a forma
O manipulador de eventos Paint limpa as caixas de imagem de resultados e adiciona os resultados de reconhecimento salvos a elas.
Eliminar os Traços
O método CmdClear_Click do formulário manipula o comando Clear. Se o InkCollector estiver coletando tinta no momento, uma caixa de mensagem será exibida e o comando será ignorado. Caso contrário, o manipulador de eventos interrompe o reconhecimento em segundo plano, limpa a propriedade Strokes do contexto do reconhecedor, e apaga os traçados do objeto InkDisp do formulário. Em seguida, o manipulador de eventos redesenha a caixa de imagem à qual o coletor de tinta está associado e limpa as cadeias de reconhecimento e as caixas de imagem.
If Not (ic.CollectingInk) Then
' Stop the unfinished recognition processes
rc.StopBackgroundRecognition
' ...
Set rc.Strokes = Nothing
' Delete all the strokes from the ink object
ic.Ink.DeleteStrokes strokesToDelete
' Refresh the window
fraBox.Refresh
' refresh the recognizer context
Set rc.Strokes = ic.Ink.Strokes
' Clear the result strings
FullCACText = ""
PrefixCACText = ""
RandomCACText = ""
' Clear the result windows
PctResult(0).Cls
PctResult(1).Cls
PctResult(2).Cls
Else
MsgBox "Cannot clear ink while the ink collector is busy."
End If