次の方法で共有


TextPattern および埋め込みオブジェクトの概要

更新 : 2007 年 11 月

ここでは、テキスト ドキュメントまたはコンテナ内で、埋め込みオブジェクトつまり子要素を Microsoft UI オートメーションが公開する方法について説明します。

UI オートメーションでは、埋め込みオブジェクトはテキスト以外の境界を持つ要素です。たとえば、イメージ、ハイパーリンク、テーブル、Microsoft Excel のスプレッドシートや Microsoft Windows Media ファイルなどのドキュメント タイプがあります。これは、あるアプリケーションで要素が作成され、別のアプリケーション内に埋め込まれる (リンクされる) ことを意味する標準的な定義とは異なります。オブジェクトを元のアプリケーションで編集できるかどうかは、UI オートメーションとは無関係です。

このトピックには次のセクションが含まれています。

  • 埋め込みオブジェクトと UI オートメーション ツリー
  • TextPattern と TextPatternRange を使用した埋め込みオブジェクトの公開
  • 一般的なシナリオ
  • 関連トピック

埋め込みオブジェクトと UI オートメーション ツリー

UI オートメーションツリーのコントロール ビューでは、埋め込みオブジェクトは個々の要素として扱われます。テキスト コンテナの子として公開され、UI オートメーションの他のコントロールと同じモデルを通してアクセスできます。

 

テーブル、イメージ、およびハイパーリンクの埋め込みオブジェクトのあるテキスト コンテナの例
テキスト コンテナ内にイメージを含む埋め込みテーブル

 

前で示したテキスト コンテナの一部に対するコンテンツ ビューの例
前の例の内容ビュー

TextPattern と TextPatternRange を使用した埋め込みオブジェクトの公開

TextPatternコントロール パターン クラスと TextPatternRange クラスを組み合わせて使用すると、埋め込みオブジェクトのナビゲーションと照会を簡単にするメソッドとプロパティが公開されます。

テキスト コンテナのテキスト コンテンツ (中のテキスト) と埋め込みオブジェクト (ハイパーリンクやテーブルのセルなど) は、UI オートメーション ツリーのコントロール ビューとコンテンツ ビューのいずれでも、連続する単一のテキスト ストリームとして公開されます。オブジェクトの境界は無視されます。UI オートメーション クライアントが何らかの方法で引用、解釈、または分析することを目的としてテキストを取得している場合、特別なケース (テキスト コンテンツを持つ表やその他の埋め込みオブジェクトなど) についてテキスト範囲を調べる必要があります。これを行うには、GetChildren を呼び出して各埋め込みオブジェクトの AutomationElement を取得し、次に RangeFromChild を呼び出して各要素のテキスト範囲を取得します。この操作を、すべてのテキスト コンテンツが取得されるまで繰り返します。

 

埋め込みオブジェクトを含むテキスト ストリームと、埋め込みオブジェクトの範囲の例
埋め込みオブジェクトにまたがるテキスト範囲。

テキスト範囲の内容をスキャンする必要がある場合、Move メソッドを正常に実行するために内部的に行われる一連の手順があります。

  1. テキスト範囲が正規化されます。つまり、テキスト範囲は Start エンドポイントで低次元テキスト範囲に縮小されます。これにより、End エンドポイントは不要になります。この手順は、テキスト範囲が複数の TextUnit 境界にわたる状況で、あいまいさを排除するために必要です。たとえば、"{" と "}" がテキスト範囲エンドポイントである "{The U}RL https://www.microsoft.com is embedded in text" のような場合です。

  2. 結果として得られる範囲は、DocumentRange 内で、要求された TextUnit 境界の先頭に向かって後方に移動されます。

  3. 範囲は、DocumentRange 内で、TextUnit 境界の要求された数の分、前方または後方に移動されます。

  4. 範囲は、要求された 1 つの TextUnit 境界の分、End エンドポイントを移動することによって、低次元テキスト範囲の状態から拡大されます。

 

テキスト範囲を Move() と ExpandToEnclosingUnit() に対して調整する方法の例
Move & ExpandToEnclosingUnit による範囲調整

一般的なシナリオ

以下では、埋め込みオブジェクトに関係する最も一般的なシナリオの例を示します。

使用例の凡例 :

{ = Start

} = End

ハイパーリンク

例 1 - 埋め込みのテキスト ハイパーリンクを含むテキスト範囲

{The URL https://www.microsoft.com is embedded in text}.

 

呼び出すメソッド

結果

GetText

文字列 "The URL https://www.microsoft.com is embedded in text" を返します。

GetEnclosingElement

テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダ自体を表す AutomationElement です。

GetChildren

ハイパーリンク コントロールを表す AutomationElement を返します。

RangeFromChild (AutomationElement は前の GetChildren メソッドから返されるオブジェクト)

"http://www.microsoft.com" を表す範囲を返します。

 

例 2 - 埋め込みのテキスト ハイパーリンクに部分的にかかるテキスト範囲

The URL http://{www}.microsoft.com is embedded in text.

 

呼び出すメソッド

結果

GetText

文字列 "www" を返します。

GetEnclosingElement

テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、ハイパーリンク コントロールです。

GetChildren

テキスト範囲が URL 文字列全体をカバーしていないため、null を返します。

 

例 3 - テキスト コンテナのコンテンツを部分的に含むテキスト範囲。テキスト コンテナには、テキスト範囲の一部ではない埋め込みのテキスト ハイパーリンクがあります。

{The URL} https://www.microsoft.com is embedded in text.

 

呼び出すメソッド

結果

GetText

文字列 "The URL" を返します。

GetEnclosingElement

テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダ自体を表す AutomationElement です。

Move、パラメータは (TextUnit.Word, 1)

ハイパーリンクのテキストが個々の単語で構成されているため、テキスト範囲を "http" に移動します。この場合、ハイパーリンクは単一のオブジェクトとして扱われません。

The URL {http}://www.microsoft.com is embedded in text.

 

イメージ

例 1 - 埋め込まれたイメージを含むテキスト範囲

{The image 埋め込みイメージの例 is embedded in text}.

 

呼び出すメソッド

結果

GetText

文字列 "The is embedded in text" を返します。イメージに関連付けられている ALT テキストがテキスト ストリームに含まれることは期待できません。

GetEnclosingElement

テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダ自体を表す AutomationElement です。

GetChildren

イメージ コントロールを表す AutomationElement を返します。

RangeFromChild (AutomationElement は前の GetChildren メソッドから返されるオブジェクト)

"埋め込みイメージの例" を表す低次元テキスト範囲を返します。

 

例 2 - テキスト コンテナのコンテンツを部分的に含むテキスト範囲。テキスト コンテナには、テキスト範囲の一部ではない埋め込まれたイメージがあります。

{The image} 埋め込みイメージの例 is embedded in text.

 

呼び出すメソッド

結果

GetText

文字列 "The image" を返します。

GetEnclosingElement

テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダ自体を表す AutomationElement です。

Move、パラメータは (TextUnit.Word, 1)

テキスト範囲を "is " に移動します。テキスト ベースの埋め込みオブジェクトだけがテキスト ストリームの一部と見なされるため、この例のイメージは、Move またはその戻り値 (この場合は 1) に影響を与えません。

テーブル

例で使用するテーブル

イメージを含むセル

テキストを含むセル

埋め込みイメージの例

X

埋め込みイメージの例 2

Y

埋め込みイメージの例 3

Z のイメージ

Z

 

例 1 - セルのコンテンツからテキスト コンテナを取得する

 

呼び出すメソッド

結果

GetItem、パラメータは (0,0)

テーブル セルのコンテンツを表す AutomationElement を返します。この場合は、テキスト コントロールの要素です。

RangeFromChild (AutomationElement は前の GetItem メソッドから返されるオブジェクト)

イメージ 埋め込みイメージの例 を含む範囲を返します。

前の RangeFromChild メソッドから返されるオブジェクトに対する GetEnclosingElement

テーブル セルを表す AutomationElement を返します。この場合は、要素は TableItemPattern をサポートするテキスト コントロールです。

前の GetEnclosingElement メソッドから返されるオブジェクトに対する GetEnclosingElement

テーブルを表す AutomationElement を返します。

前の GetEnclosingElement メソッドから返されるオブジェクトに対する GetEnclosingElement

テキスト プロバイダ自体を表す AutomationElement を返します。

 

例 2 - セルのテキスト コンテンツを取得する

 

呼び出すメソッド

結果

GetItem、パラメータは (1,1)

テーブル セルのコンテンツを表す AutomationElement を返します。この場合は、テキスト コントロールの要素です。

RangeFromChild (AutomationElement は前の GetItem メソッドから返されるオブジェクト)

"Y" を返します。

参照

処理手順

UI オートメーションを使用した、埋め込みオブジェクトへのアクセス

UI オートメーションを使用したテーブルの内容の公開

UI オートメーションを使用したテキストのスキャン

TextPattern の検索および選択のサンプル

参照

TextPattern

TextPatternRange

ITextProvider

ITextRangeProvider