カスタム インク コレクターのテキスト修正を有効にする
Microsoft タブレット PC 入力パネルは、ペンで手書きのテキストを入力し、キーボードを使用せずにテキストを修正するための強力なツールです。 入力パネルを使用する場合、ユーザーは入力パネルの手描き入力サーフェスに手書きしてテキストを入力します。これにより、入力パネルはユーザーの手書きをテキストとして認識します。 テキストが認識されると、ユーザーは [入力パネル] の [挿入] をタップして、アプリケーションまたはドキュメントにテキストを挿入します。 テキストを挿入する前に、ユーザーは入力パネルの一連の修正ツールにアクセスできます。 これには、代替認識結果の選択、1 つの文字を書き換える機能、または単語全体をスクラッチアウトして書き換える機能が含まれます。 これらの修正ツールを使用すると、ユーザーは認識エラーとヒューマン エラーの両方を修正できます。
入力パネルを使用して入力したテキストがドキュメントに含まれると、ユーザーは、Windows Text Services Framework ベースおよび Text Services 対応アプリケーションに挿入する前に使用できるのと同じ修正機能にアクセスできます。 Microsoft Windows XP Service Pack 2 Tablet PC Edition 以降では、すべてのリッチ エディット アプリケーションが既定で Text Services 対応になり、Windows Vista 以降では、HTML アプリケーションは既定で Text Services 対応になっています。 ドキュメント内修正は、Text Service ベースの有効なアプリケーションでのみ使用できます。これは、入力パネルは、ドキュメント内修正を提供するために、関連付けられたテキスト プロパティ (インク オブジェクトや認識代替を含む) を格納する Text Service の機能に依存しているためです。
ただし、音声認識の修正や外出先での入力テキストの修正など、入力パネルを使用したテキスト入力から始まらないが、文書内修正はタブレット PC ユーザーにとって非常に便利なシナリオが多数あります。 主な例は、ペンを使用してテキストを入力するためのカスタム インク サーフェスを提供するアプリケーションです。 カスタム 手描き入力サーフェスは、アプリケーションが各アプリケーションのテキスト入力タスクに固有の独自に調整された機能を提供するための優れた方法です。 さらに、カスタム 手描き入力サーフェスは、完全に統合されたタブレット PC ユーザー エクスペリエンスを提供します。これにより、ペンがそれらを含むアプリケーションで最初のクラスの入力デバイスであることが明らかになります。 ただし、カスタム 手描き入力サーフェスを提供するアプリケーションでは、入力パネルのドキュメント内修正と同じレベルの修正サポートを提供できないか、または提供できない場合があります。
入力パネルを使用して入力されていないテキストの修正にドキュメント内修正が役立つ Text Services ベースまたは有効なアプリケーションでは、入力パネルの IHandWrittenTextInsertion API (マネージ コードの Microsoft.TextInput.HandwrittenTextInsertion クラス) を使用して、他の方法で入力されたテキストのドキュメント内修正を有効にすることができます。 このようにして、アプリケーションはカスタムの手描き入力サーフェスやその他のテキスト入力シナリオに強力な修正サポートを安価に追加し、タブレット PC のテキスト入力ストーリーを丸めることができます。 入力パネル IHandWrittenTextInsertion API は、Windows Vista オペレーティング システムの一部として、および Tablet Platform SDK バージョン 1.9 以降の一部として含まれています。 API の .NET ベースと COM ベースのバージョンの両方が含まれています。 入力パネルを使用して入力されていないテキストのドキュメント内修正を有効にすることは、Windows Vista 以降でサポートされています。 文書内修正はラテン言語でのみ使用でき、ラテン文字セットの外側の文字を表示できません。
アプリケーションで HandwrittenTextInsertion API を使用する方法
入力パネルと IHandWrittenTextInsertion API を使用して入力されていないテキストの入力パネルのドキュメント内修正を統合するために、アプリケーションに必要な変更は簡単です。 最後の手順を除き、すべてのアプリケーションのカスタム テキスト入力コードは変更されません。 ユーザー設定の手描き入力画面、音声認識、またはその他の手段を使用してテキストが入力された時点で、テキスト サービスが有効なテキスト フィールドに表示されると、アプリケーションはテキストをテキスト フィールドに直接送信するのではなく、 IHandWrittenTextInsertion インターフェイスにテキストを送信します。 次に、入力パネルのプログラミング コンポーネントは、テキスト フィールドと Text Services バッキング ストアの両方にテキストを挿入します。 テキストを Text Services バッキング ストアに追加すると、入力パネルのプログラミング コンポーネントは、そのテキストに対してドキュメント内修正を有効にするために入力パネルで必要なテキスト プロパティの設定を処理します。
次のセクションでは、COM バージョンの IHandWrittenTextInsertion API を使用する C++ アプリケーションのこのプロセスについて詳しく説明します。 C# で API の.NET Frameworkバージョンを使用する手順は、C++ の using COM バージョンと異なる点に注意してください。 マネージド HandwrittenTextInsertion API には、単一の COM インターフェイス IHandwrittenTextInsertion が含まれています。 このインターフェイスの定義は、PenInputPanel.h および PenInputPanel_i.c にあります。
まず、アプリケーションで CoCreateInstance 関数を使用して、クラス ID がCLSID_HandwrittenTextInsertionされた IHandWrittenTextInsertion のインスタンスを生成する必要があります。 CLSID_HandwrittenTextInsertion オブジェクトの作成は、ウィンドウが作成され、フォーカスが与えられた後にのみ成功することに注意してください。これは、それまで Text Services バッキング ストアがアクティブ化されないためです。 さらに、tiptsf.dllがシステムに存在しない場合、 CoCreateInstance 関数は失敗し、 REGDB_E_CLASSNOTREGを返します。これは、入力パネルのドキュメント内修正がシステムでサポートされていないことを示します。 この時点で、入力パネルのドキュメント内修正を有効にせずにアプリケーションを続行する必要があります。 HandwrittenTextInsertion のインスタンスには、テキスト フィールドへのテキストの挿入を処理するアプリケーションのコードからアクセスできる必要があります。
注意
api の.NET Frameworkバージョンを使用する場合、アプリケーションは、Microsoft.Ink.TextInput 名前空間へのアクセスを許可する using ステートメントを追加し、オブジェクトを直接作成する必要があります。
次に、テキストフィールドにテキストを挿入するアプリケーションのコードを変更して、テキストフィールドにテキストを直接挿入せずに、代わりに IHandwrittenTextInsertion の 2 つの挿入メソッドを呼び出すようにする必要があります。 アプリケーションで InsertRecognitionResultsArray と InsertRecognitionResults のどちらを呼び出すかは、アプリケーションが配列として格納されているテキストと IInkRecognitionResult オブジェクトの認識代替を持っているかどうかによって異なります。
注意
マネージド コードで作業する場合、InsertRecognitionResultsArray によって使用される対応する認識オブジェクトは RecognitionResult です。 どちらのメソッドも、次の 3 つのパラメーターを使用します。
- 代替 配列の配列または IInkRecognitionResult (または RecognitionResult) オブジェクトとして格納される、文字列の 2 次元コレクションです。 代替が配列の配列として格納されている場合は、安全な配列ポインターとして渡す必要があります。 最上位の配列の各エントリは、挿入内の 1 つの単語の代替候補の一覧です。 代替のサブ配列の位置 0 のエントリは、テキスト フィールドに挿入されるテキストです。 追加の代替 (各サブ配列のインデックス 1 から n) は Text Services バッキング ストアに格納され、ドキュメント内修正の一部としてユーザーに選択肢として提供されます。 代替候補が含まれていない場合、ユーザーには代替候補の一覧の代わりに "提案なし" と表示されます。 挿入に複数の単語の間にスペースが含まれている場合は、各スペースを最上位の配列のエントリとして含める必要があります。
- 言語alternates パラメーターに含まれるテキストに対応する入力言語 LCID。 代替のコンテンツが手書きまたは音声認識エンジンによって生成された場合、これは使用される認識エンジンに関連付けられている Languages プロパティでもあります。
- fLatticeContainsAutoSpacingInformation代替パラメーターに含まれるテキストが、自動間隔が有効になっている認識エンジンによって生成されたかどうかを示すフラグ。 自動間隔が有効になっている場合は、フラグを TRUE に設定する必要があります。 自動間隔が無効になっている場合は、フラグを FALSE に設定する必要があります。 代替の内容が、自動間隔をサポートしていない認識エンジンによって生成された場合、または認識エンジンによってまったく生成されなかった場合は、フラグを FALSE に設定する必要があります。
入力パネルのプログラミング モデルでは、システム キャレットの位置からドキュメントまたはアプリケーションにテキストを挿入できます。
どちらのメソッドも、挿入 が成功した場合S_OK を返します。 アプリケーションが Text Services ベースまたは有効でない場合はE_NOINTERFACEを返し、代替が不適切な形式またはアクセスできない場合はE_INVALIDARGします。 また、システムで使用可能なメモリが不足 している場合や 、Text Services Framework が有効になっていないなどの致命的な障害が発生した後に E_FAIL した場合にも、E_OUTOFMEMORYが返される可能性があります。
まとめ
入力パネルを使用して入力されていないテキストに対して入力パネルの文書内修正を有効にすると、Text Services ベースまたは有効なアプリケーションが、強力なペンベースの修正機能を使用してカスタム の手描き入力または入力方法を補完する安価で簡単な方法です。 Windows Vista では、リッチ エディット アプリケーションと Trident アプリケーションはすべて Text Services が有効になっています。 統合された手描き入力サーフェスは、カスタムのタブレット PC ユーザー エクスペリエンスをアプリケーションに追加するための優れたオプションですが、修正機能が含まれていない場合にのみ、テキスト入力の半分をサポートします。 ドキュメント内修正では、認識代替の選択を入れ替えたり、選択範囲の一部またはすべてを書き換えたりする機能を追加することで、ストーリーの残りの半分をユーザーに提供します。
関連トピック