Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W przykładzie Autouzupełnianie pokazano, jak zaimplementować autouzupełnianie znaków w języku japońskim przy użyciu interfejsów programowania aplikacji rozpoznawania (API).
W tym przykładzie są używane następujące funkcje:
- Korzystanie z modułu zbierającego atrament
- Używanie kontekstu rozpoznawania
Inicjowanie kolektora tuszu i kontekstu rozpoznawania pisma odręcznego
Obiekty InkCollector i InkRecognizerContext są deklarowane jako klasy, które mogą zgłaszać zdarzenia.
Dim WithEvents ic As InkCollector
Dim WithEvents rc As InkRecognizerContext
Procedura obsługi zdarzeń ładowania formularza tworzy kolektor tuszu, kojarzy kolektor tuszu z pudełkiem obrazu i włącza zbieranie tuszu. Następnie program obsługi zdarzeń ładuje domyślny japoński aparat rozpoznawania i inicjuje właściwości Przewodnik i pociągnięcia kontekstu rozpoznawania.
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
Ładowanie domyślnego rozpoznawacza japońskiego
Metoda GetDefaultRecognizer klasy InkRecognizers jest wywoływana w celu pobrania domyślnego rozpoznawcy dla języka japońskiego. Następnie właściwość Languages obiektu IInkRecognizer jest sprawdzana w celu określenia, czy rozpoznawanie obsługuje język japoński. Jeśli tak, metoda CreateRecognizerContext jest używana do tworzenia kontekstu rozpoznawania dla formularza.
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
Obsługa zdarzenia pociągnięcia
Program obsługi zdarzeń Stroke najpierw zatrzymuje rozpoznawanie w tle w kontekście rozpoznawania. Następnie dodaje nowe pociągnięcie do właściwości Strokes kontekstu rozpoznawania. Na koniec ustawia właściwość InkRecognizerCharacterAutoCompletionMode kontekstu rozpoznawania, a następnie wywołuje metodę BackgroundRecognizeWithAlternates dla każdego z trzech trybów autouzupełniania znaków. Parametr CustomData metody BackgroundRecognizeWithAlternates służy do identyfikacji, które wyniki rozpoznawania są zwracane w zdarzeniu 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
Obsługa rozpoznawania za pomocą zdarzenia alternatywnego
Element obsługujący zdarzenie RecognitionWithAlternates najpierw sprawdza parametr RecognitionStatus. Jeśli wystąpi błąd podczas rozpoznawania, program obsługi zdarzeń ignoruje wyniki rozpoznawania. W przeciwnym razie program obsługi zdarzeń dodaje parametr RecognitionResult do odpowiedniego pola obrazu i zapisuje ciąg wyniku. Parametr CustomData jest ustawiany w wywołaniu metody BackgroundRecognizeWithAlternates i identyfikuje, który tryb autouzupełniania znaków był używany przez kontekst rozpoznawania.
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
Malowanie formularza
Procedura obsługi zdarzenia Paint czyści okna obrazu wyników i dodaje do nich zapisane wyniki rozpoznawania.
Usuwanie pociągnięć
Metoda CmdClear_Click formularza obsługuje polecenie Clear. Jeśli inkCollector aktualnie zbiera atrament, zostanie wyświetlone pole komunikatu i polecenie zostanie zignorowane. W przeciwnym razie program obsługi zdarzeń zatrzymuje rozpoznawanie w tle, czyści właściwość Strokes kontekstu rozpoznawania i usuwa pociągnięcia z obiektu InkDisp formularza. Następnie program obsługi zdarzeń ponownie rysuje pole obrazu, z którym jest skojarzony kolektor atramentu, oraz usuwa ciągi rozpoznawania i czyści pola obrazów.
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