Text コントロール パターンと TextRange コントロール パターンについて

コントロールのテキスト コンテンツは、テキスト コンテナーの内容をテキスト ストリームとして表す Text コントロール パターンを使用して公開されます。 Text コントロール パターンでは、書式属性とスタイル属性を公開するために TextRange コントロール パターンのサポートが必要です。 TextRange コントロール パターンは、開始エンドポイントと終了エンドポイントのコレクションを持つテキスト コンテナー内の連続した、または複数の非結合テキスト スパン (または範囲) を表すことによって、Text コントロール パターンをサポートします。 TextRange コントロール パターンでは、選択、比較、取得、トラバーサルなどの機能がサポートされています。

Note

テキスト コントロール パターンでは、 テキスト を挿入または変更する手段は提供されません。 ただし、コントロールによっては、Microsoft UI オートメーション Value コントロール パターンまたは直接キーボード入力を使用してこれを実現できます。 また、テキストへのプログラムによる変更をサポートする TextEdit パターンもあります。

 

このトピックで説明する機能は、支援技術ベンダーとそのエンド ユーザーにとって不可欠です。 支援テクノロジでは、UI オートメーションを使用して、ユーザーの完全なテキスト書式設定情報を収集し、TextUnit (文字、単語、行、または段落) によるプログラムによるナビゲーションとテキストの選択を提供できます。

このトピックは、次のセクションで構成されています。

UI オートメーション TextPattern と Text Services Framework

Text Services Framework (TSF) は、デスクトップおよびアプリケーションで自然言語サービスと高度なテキスト入力を可能にする、シンプルでスケーラブルなシステム フレームワークです。 アプリケーションがテキスト ストアを公開するためのインターフェイスを提供するだけでなく、テキスト ストアのメタデータもサポートします。

TSF は、コンテキスト対応のシナリオに入力を挿入する必要があるアプリケーション向けに設計されています。 ただし、 テキスト コントロール パターンは、スクリーン リーダーおよび点字デバイス用のテキスト ストアへの最適化されたアクセスを提供することを目的とした読み取り専用ソリューションです。

テキスト ストアへの読み取り専用アクセスを必要とするアクセス可能なテクノロジでは、テキスト制御パターンを使用できますが、コンテキスト対応の入力には TSF の機能が必要になります。

詳細については、「 Text Services Framework」を参照してください。

コントロールの種類

UI オートメーションエディット コントロールの種類とドキュメント コントロールの種類は、テキスト コントロール パターンをサポートする必要があります。 アクセシビリティを向上するために、 ツールヒント とテキスト コントロールの種類でもテキスト コントロール パターンをサポートすることをお勧めしますが、必須ではありません。

プロバイダーのインターフェイス

UI オートメーション プロバイダーは、ITextProvider インターフェイスと ITextRangeProvider インターフェイスを実装することで、コントロールの Text コントロール パターンサポートします。 これらのインターフェイスは、コントロール内のテキストの詳細な属性情報を公開し、堅牢なナビゲーション機能を提供します。

コントロールに特定の属性のサポートがない場合、プロバイダーはすべてのテキスト属性をサポートする必要はありません。

コントロールがテキスト領域内でのテキストの選択またはテキスト カーソル (またはシステム キャレット) の配置をサポートしている場合、プロバイダーは ITextProvider::GetSelection メソッドと ITextRangeProvider::Select メソッドをサポートする必要があります。 コントロールがこの機能をサポートしていない場合は、これらのメソッドのいずれかをサポートする必要はありません。 ただし、コントロールは 、ITextProvider::SupportedTextSelection プロパティを実装することによって、サポートされるテキスト選択の種類を公開する必要があります。

プロバイダーは、 TextUnit 定数、 TextUnit_CharacterTextUnit_Document、およびサポートできるその他の定数を常にサポートする必要があります。

Note

プロバイダーは、次の順序でサポートされている次の最大のユニット (TextUnit_Character、TextUnit_Format、TextUnit_WordTextUnit_LineTextUnit_Paragraph、TextUnit_PageTextUnit_Document) に遅延することで、特定TextUnit のサポートをスキップできます。

 

クライアント インターフェイス

クライアント アプリケーションUI オートメーション、IUIAutomationTextPattern インターフェイスと IUIAutomationTextRange インターフェイスを使用して、テキスト コントロールのテキスト コンテンツにアクセスします。 クライアントは IUIAutomationTextPattern を使用して、 テキスト範囲と呼ばれるテキストのスパンを選択し、範囲の IUIAutomationTextRange インターフェイスへのポインターを取得します。 IUIAutomationTextRange インターフェイスを使用すると、クライアントはテキスト範囲を操作したり、フォント名、前景色、下線のスタイルなどの属性など、範囲内のテキストに関する情報を取得したりできます。 詳細については、「 テキスト属性識別子」を参照してください。

パフォーマンス

テキスト コントロール パターンは、ほとんどの機能をクロスプロセス呼び出しに依存するため、コンテンツを処理するときにパフォーマンスを向上させるキャッシュ メカニズムは提供されません。 Microsoft UI オートメーションの他の制御パターンには、IUIAutomationElement::GetCachedPattern メソッドを使用してアクセスできます。

パフォーマンスを向上させる手法の 1 つは、UI オートメーション クライアントが IUIAutomationTextRange::GetText メソッドを使用して、中程度のサイズのテキスト ブロックを取得しようとすることです。 たとえば、 GetText を使用して 1 文字を取得すると、各文字に対してクロスプロセス ヒットが発生しますが、 GetText を呼び出すときに最大長を指定しないと、1 つのクロスプロセス ヒットが発生しますが、テキスト範囲のサイズによっては待機時間が長くなる可能性があります。

テキスト パターンと仮想化された埋め込みオブジェクト

可能な限り、 ITextProviderITextRangeProvider のプロバイダー実装では、ビューポートの外部のテキストを含め、ドキュメントのテキスト全体をサポートする必要があります。 画面外のテキストまたは仮想化された埋め込みオブジェクトの場合、プロバイダーは VirtualizedItem コントロール パターン (IVirtualizedItemProvider) をサポートする必要があります。

テキスト ストリーム全体が使用可能な状態でドキュメントが仮想化されている場合、 ITextProvider::D ocumentRange プロパティは、ドキュメント全体を含むテキスト範囲を取得します。 ただし、 ITextRangeProvider メソッドを呼び出すと、ドキュメント内のすべての埋め込みオブジェクトを表す仮想化オブジェクトのコレクションが取得されます。 仮想化された埋め込みオブジェクトを操作するには、クライアントは IVirtualizedItemProvider::Realize メソッドを呼び出す必要があります。これにより、項目にUI オートメーション要素として完全にアクセスできるようになります。 クライアントは、テーブルの一部が画面外で仮想化されている埋め込みテーブルのグリッド要素を操作するには、同様のプロセスに従う必要があります。

テキスト コントロール パターンでのカスタム コントロール型の使用

Text コントロール パターンは多くのテキスト属性と埋め込みオブジェクトをサポートしていますが、可能なすべてのドキュメント要素とプレゼンテーションの種類を事前に定義することはできません。 既存の属性または標準のコントロール型でサポートされていないドキュメント要素の場合、プロバイダーは、UI オートメーションカスタム コントロール型によって提供される機能拡張機能を使用できます。

ページ プレゼンテーションに基づくアプリケーションとユーザー インターフェイスの場合、"ページ" の境界とレイアウトの表示は、 LocalizedControlType="page"カスタム コントロール型 (つまり) を持つ埋め込みオブジェクトとして表現することもできます。 これにより、埋め込みオブジェクトは、各ページのヘッダー フィールドやフッター フィールドなど、ドキュメント テキスト ストリームの一部にできない他のページ要素を、"page" 埋め込みオブジェクトの子としてホストできます。 また、各 "ページ" オブジェクトは、 テキスト コントロール パターンを個別にサポートできます。これは、スライド ショー プレゼンテーション用の作成ツールやページベースのデスクトップ発行環境などのアプリケーションに適しています。

テキスト範囲の有効期間

可能であれば、プロバイダーは、削除、挿入、移動などのテキストの変更が、関連付けられているテキスト範囲に反映されるようにする必要があります。 テキスト範囲を更新できない場合、プロバイダーは UIA_Text_TextChangedEventId イベントを発生させ、テキスト範囲が無効になり、新しいテキスト範囲を取得する必要があることをクライアントに通知する必要があります。

概念

埋め込みオブジェクトUI オートメーションサポートする方法

UI オートメーション コントロール パターンの概要

テキスト コンテンツのUI オートメーションサポート

テキスト ベースのコントロールの操作

その他のリソース

Text Services Framework (TSF)