Aktivieren der Textkorrektur für benutzerdefinierte Freihandsammler
Der Microsoft Tablet PC-Eingabebereich ist ein leistungsstarkes Tool zum Eingeben von handschriftlichem Text mit einem Stift und zum Korrigieren von Text ohne Die Verwendung einer Tastatur. Bei Verwendung des Eingabebereichs gibt ein Benutzer Text per Handschrift auf die Freihandflächen des Eingabebereichs ein, wodurch der Eingabebereich die Handschrift des Benutzers als Text erkennt. Nachdem der Text erkannt wurde, tippt der Benutzer im Eingabebereich auf Einfügen, um den Text in eine Anwendung oder ein Dokument einzufügen. Vor dem Einfügen des Texts hat ein Benutzer Zugriff auf eine Reihe von Korrekturtools im Eingabebereich. Dazu gehören die Auswahl eines alternativen Erkennungsergebnisses, die Möglichkeit, ein einzelnes Zeichen neu zu schreiben oder sogar das gesamte Wort zu zerkratzen und neu zu schreiben. Mit diesen Korrekturtools kann ein Benutzer sowohl Erkennungsfehler als auch menschliche Fehler korrigieren.
Sobald sich der über den Eingabebereich eingegebene Text im Dokument befindet, haben Benutzer Zugriff auf die gleiche Korrekturfunktion, die vor dem Einfügen in Windows Text Services Framework-basierten und Text services-fähigen Anwendungen verfügbar ist. Ab Microsoft Windows XP Service Pack 2 Tablet PC Edition sind alle Rich-Edit-Anwendungen standardmäßig Textdienste-fähig, und ab Windows Vista sind HTML-Anwendungen standardmäßig Textdienste aktiviert. Die Korrektur in Dokumenten ist nur in Textdienst-basierten und aktivierten Anwendungen verfügbar. Dies liegt daran, dass der Eingabebereich von der Fähigkeit des Textdiensts abhängig ist, zugeordnete Texteigenschaften zu speichern, einschließlich Freihandobjekten und Erkennungs-Alternativen, um eine Korrektur im Dokument bereitzustellen.
Es gibt jedoch zahlreiche Szenarien, einschließlich der Korrektur der Spracherkennung oder der Korrektur von eingegebenem Text unterwegs, die nicht mit der Texteingabe über den Eingabebereich beginnen, aber in denen die Dokumentkorrektur für Tablet-PC-Benutzer äußerst nützlich sein kann. Ein erstklassiges Beispiel ist in Anwendungen, die benutzerdefinierte Freihandflächen für die Eingabe von Text mit einem Stift bereitstellen. Benutzerdefinierte Freihandflächen sind eine hervorragende Möglichkeit für Anwendungen, um speziell auf die Texteingabeaufgaben der einzelnen Anwendungen zugeschnittene Funktionen bereitzustellen. Darüber hinaus bieten benutzerdefinierte Freihandoberflächen eine vollständig integrierte Tablet-PC-Benutzeroberfläche, wodurch klar wird, dass der Stift ein erstklassiges Eingabegerät in Anwendungen ist, die sie enthalten. Anwendungen, die benutzerdefinierte Freihandflächen bereitstellen, können jedoch möglicherweise nicht die gleiche Korrekturunterstützung bereitstellen, die über die Eingabebereich-In-Dokumentkorrektur verfügbar ist.
TextDienste-basierte oder aktivierte Anwendungen, in denen die Dokumentkorrektur für die Korrektur von Texten nützlich ist, die nicht über den Eingabebereich eingegeben wurden, können die IHandWrittenTextInsertion-API des Eingabebereichs (Microsoft.TextInput.HandwrittenTextInsertion-Klasse in verwaltetem Code) verwenden, um die Korrektur in dokumenteninternen Text für text, der mit anderen Mitteln eingegeben wurde, zu ermöglichen. Auf diese Weise können Anwendungen ihren benutzerdefinierten Freihandoberflächen oder anderen Texteingabeszenarien eine leistungsstarke Korrekturunterstützung hinzufügen und ihre Texteingabegeschichte für Tablet PC abrunden. Die Eingabebereich-IHandWrittenTextInsertion-API ist als Teil des Windows Vista-Betriebssystems und als Teil des Tablet Platform SDK, Version 1.9 oder höher, enthalten. Sowohl eine .NET- als auch eine COM-basierte Version der API sind enthalten. Das Aktivieren der Dokumentkorrektur für Text, der nicht über den Eingabebereich eingegeben wurde, wird unter Windows Vista und höher unterstützt. Die Dokumentkorrektur ist nur für lateinische Sprachen verfügbar und kann keine Zeichen außerhalb des lateinischen Zeichensatzes anzeigen.
Verwenden der handgeschriebenen TextInsertion-API in einer Anwendung
Die erforderlichen Änderungen an einer Anwendung, um die Eingabebereich-In-Dokumentkorrektur für Text zu integrieren, der nicht über den Eingabebereich und die IHandWrittenTextInsertion-API eingegeben wurde, sind einfach. Der gesamte benutzerdefinierte Texteingabecode der Anwendung bleibt mit Ausnahme des letzten Schritts unverändert. An dem Punkt, an dem Text, der mit einer benutzerdefinierten Freihandoberfläche, Spracherkennung oder anderen Mitteln eingegeben wurde, in einem Textfeld mit Aktiviertem Textdienst angezeigt werden soll, sendet die Anwendung den Text an die IHandWrittenTextInsertion-Schnittstelle , anstatt ihn direkt an das Textfeld zu senden. Die Programmierbarkeitskomponente des Eingabebereichs verarbeitet dann das Einfügen des Texts in das Textfeld und den Text Services-Backing-Store. Beim Hinzufügen des Texts zum Text Services-Backing-Store übernimmt die Programmierbarkeitskomponente des Eingabebereichs das Festlegen der Texteigenschaften, die für den Eingabebereich erforderlich sind, damit die Dokumentkorrektur für diesen Text aktiviert werden kann.
Im folgenden Abschnitt wird dieser Prozess für eine C++-Anwendung unter Verwendung der COM-Version der IHandWrittenTextInsertion-API ausführlich beschrieben. Es gibt Hinweise, an denen sich die Schritte für die Verwendung der .NET Framework-Version der API in C# für die verwendenden COM-Version in C++ unterscheiden. Die verwaltete HandwrittenTextInsertion-API enthält eine einzelne COM-Schnittstelle, IHandwrittenTextInsertion. Die Definition für diese Schnittstelle befindet sich in PenInputPanel.h und PenInputPanel_i.c.
Zunächst sollte die Anwendung die CoCreateInstance-Funktion verwenden, um eine instance von IHandWrittenTextInsertion mit der Klassen-ID CLSID_HandwrittenTextInsertion zu erstellen. Beachten Sie, dass die Erstellung eines CLSID_HandwrittenTextInsertion-Objekts erst erfolgreich ist, nachdem ein Fenster erstellt und fokusiert wurde, da bis dahin der Text Services-Sicherungsspeicher nicht aktiviert ist. Wenn tiptsf.dll im System nicht vorhanden ist, schlägt die CoCreateInstance-Funktion außerdem fehl und gibt REGDB_E_CLASSNOTREG zurück, was angibt, dass die Dokumentkorrektur im Eingabebereich auf dem System nicht unterstützt wird. An diesem Punkt sollte die Anwendung fortfahren, ohne zu versuchen, die Eingabebereich-In-Dokument-Korrektur zu aktivieren. Auf die instance von HandwrittenTextInsertion muss über den Code der Anwendung zugegriffen werden können, der das Einfügen von Text in ein Textfeld verarbeitet.
Hinweis
Wenn Sie mit der .NET Framework-Version der API arbeiten, sollte die Anwendung eine using-Anweisung hinzufügen, um den Zugriff auf den Microsoft.Ink.TextInput-Namespace zu ermöglichen, und dann das Objekt direkt erstellen.
Zweitens muss der Code der Anwendung, der für das Einfügen von Text in ein Textfeld verantwortlich ist, geändert werden, sodass Text nicht mehr direkt in ein Textfeld eingefügt wird, sondern stattdessen die eine oder andere der beiden Einfügemethoden von IHandwrittenTextInsertion aufgerufen wird. Ob die Anwendungen InsertRecognitionResultsArray oder InsertRecognitionResults aufrufen sollen, hängt davon ab, ob die Anwendung die Erkennungs-Alternativen für den text aufweist, der als Array oder als IInkRecognitionResult-Objekt gespeichert ist.
Hinweis
Beim Arbeiten in verwaltetem Code ist das entsprechende Erkennungsobjekt, das von InsertRecognitionResultsArray verwendet wird , RecognitionResult. Beide Methoden nutzen die folgenden drei Parameter:
- Stellvertreter Ist eine zweidimensionale Auflistung von Zeichenfolgen, die entweder als Array von Arrays oder als IInkRecognitionResult-Objekt (oder RecognitionResult) gespeichert wird. Wenn die Alternativen als Array von Arrays gespeichert werden, sollte sie als sicherer Arrayzeiger übergeben werden. Jeder Eintrag im Array der obersten Ebene ist eine Liste von Alternativen für ein einzelnes Wort in der Einfügung. Der Eintrag an Position 0 in den Unterarrays von alternates ist der Text, der in das Textfeld eingefügt wird. Die zusätzlichen Alternativen (Indizes 1 bis n in jedem Unterarray) werden im Text Services-Backing-Store gespeichert und dem Benutzer als Auswahl im Rahmen der Dokumentkorrektur angeboten. Wenn Alternative nicht enthalten sind, wird dem Benutzer anstelle der Liste der Alternativen "Kein Vorschlag" angezeigt. Wenn eine Einfügung mehrere Wörter mit Leerzeichen enthält, muss jedes Leerzeichen als Eintrag im Array der obersten Ebene enthalten sein.
- Sprache Die Eingabesprache-LCID , die dem Text entspricht, der im alternates-Parameter enthalten ist. In dem Fall, in dem der Inhalt von Alternativen von einer Handschrift- oder Spracherkennung generiert wurde, ist dies auch die Languages-Eigenschaft , die der verwendeten Erkennung zugeordnet ist.
- fLatticeContainsAutoSpacingInformation Ein Flag, das angibt, ob der im alternates-Parameter enthaltene Text von einer Erkennung mit aktiviertem automatischen Abstand generiert wurde. Wenn der automatische Abstand aktiviert war, sollte das Flag auf TRUE festgelegt werden. Wenn der automatische Abstand deaktiviert war, sollte das Flag auf FALSE festgelegt werden. Wenn der Inhalt von Alternativen von einer Erkennung generiert wurde, die automatische Abstände nicht unterstützt oder überhaupt nicht von einer Erkennung generiert wurde, sollte das Flag auf FALSE festgelegt werden.
Das Programmierbarkeitsmodell des Eingabebereichs kann den Text aus der Position des System-Carets in das Dokument oder die Anwendung einfügen.
Beide Methoden geben S_OK zurück, wenn die Einfügung erfolgreich ist. Sie geben E_NOINTERFACE zurück, wenn die Anwendung nicht auf Textdienste basiert oder nicht aktiviert ist, und E_INVALIDARG , wenn alternative Elemente nicht ordnungsgemäß formatiert oder nicht zugänglich sind. Sie können auch E_OUTOFMEMORY zurückgeben, wenn nicht genügend Arbeitsspeicher auf dem System verfügbar ist, oder E_FAIL , nachdem ein schwerwiegender Fehler wie das Text Services Framework nicht aktiviert ist.
Zusammenfassung
Das Aktivieren der Eingabebereich-In-Dokument-Korrektur für Text, der nicht über den Eingabebereich eingegeben wurde, ist eine kostengünstige und einfache Möglichkeit für eine textdienstbasierte oder aktivierte Anwendung, um eine benutzerdefinierte Freihand- oder Eingabemethode mit leistungsstarken stiftbasierten Korrekturfunktionen zu ergänzen. Unter Windows Vista sind alle Rich Edit- und Trident-Anwendungen Textdienste aktiviert. Integrierte Freihandoberflächen sind zwar eine gute Option zum Hinzufügen einer benutzerdefinierten Tablet-PC-Benutzeroberfläche zu einer Anwendung, aber sie unterstützen nur die Hälfte der Texteingabe, wenn sie keine Korrekturfunktionen enthalten. Die Dokumentkorrektur bietet Benutzern die andere Hälfte des Storys, indem sie die Möglichkeit hinzufügt, eine Auswahl gegen eine Erkennungsoption zu tauschen oder einen Teil oder die gesamte Auswahl neu zu schreiben.
Zugehörige Themen