ITextProvider
COM公式ドキュメント
テキストを含むコントロールへのアクセスを提供します。
解説(Remarks)
Text コントロールパターンをサポートする必要がある Microsoft UI Automation プロバイダーに実装されます。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
テキストベースのコントロールで現在選択されているテキストを表すテキスト範囲のコレクションを取得します。(ITextProvider.GetSelection)
| pRetVal | SAFEARRAY** | out | テキスト範囲の ITextRangeProvider インターフェースへのポインターの配列のアドレスを受け取ります。選択されたテキストのスパンごとに 1 つずつ格納されます。このパラメーターは初期化せずに渡されます。 |
戻り値
解説(Remarks)
テキスト選択をサポートする UI Automation プロバイダーの場合、プロバイダーはこのメソッドを実装し、ITextProvider::SupportedTextSelection の値も返す必要があります。
コントロールに選択されたテキストのスパンが 1 つだけ含まれている場合、pRetVal 配列には 1 つのテキスト範囲を格納する必要があります。
コントロールにテキスト挿入ポイントは含まれているが、テキストが選択されていない場合、pRetVal 配列にはテキスト挿入ポイントの位置に縮退した(空の)テキスト範囲を格納する必要があります。
コントロールに選択されたテキストがない場合、またはコントロールにテキスト挿入ポイントがない場合は、pRetVal を NULL に設定します。
テキストベースのコントロールから、各テキスト範囲が可視テキストの連続したスパンを表す、互いに重ならないテキスト範囲の配列を取得します。(ITextProvider.GetVisibleRanges)
| pRetVal | SAFEARRAY** | out | 可視テキスト範囲の ITextRangeProvider インターフェースへのポインターの配列、または空の配列のアドレスを受け取ります。NULL 参照が返されることはありません。このパラメーターは初期化せずに渡されます。 |
戻り値
解説(Remarks)
可視テキストが 1 つの連続したテキストのスパンで構成されている場合、pRetVal 配列にはすべての可視テキストを表す 1 つのテキスト範囲を格納する必要があります。
可視テキストが複数の互いに重ならないテキストのスパンで構成されている場合、pRetVal 配列には、最初の可視スパンから始まり最後の可視スパンで終わる、可視スパンごとに 1 つのテキスト範囲を格納する必要があります。可視テキストの互いに重ならないスパンは、テキストベースのコントロールのコンテンツが重なり合うウィンドウやその他のオブジェクトによって部分的に隠されている場合、または複数のページや列を持つテキストベースのコントロールのコンテンツが部分的にスクロールして表示範囲外になっている場合に発生することがあります。
ITextProvider::GetVisibleRanges は、可視テキストがない場合、すべてのテキストがスクロールして表示範囲外にある場合、またはテキストベースのコントロールにテキストが含まれていない場合、縮退した(空の)テキスト範囲を返す必要があります。
画像、ハイパーリンク、またはその他の埋め込みオブジェクトなどの子要素を囲むテキスト範囲を取得します。
| childElement | IRawElementProviderSimple* | in | 指定した子要素の UI Automation プロバイダー。 |
| pRetVal | ITextRangeProvider** | out | 子要素を囲むテキスト範囲。 この範囲は、次のように子要素のコンテンツを完全に囲みます。
このパラメーターは初期化せずに渡されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
childElement が ITextProvider の子孫でない場合、または有効なテキスト範囲で囲まれていない場合は、E_INVALIDARG が返されます。
解説(Remarks)
ITextRangeProvider::GetChildren で取得される各要素も、RangeFromChild を通じて取得できる有効なテキスト範囲を持ちます。これには、ITextProvider と子要素の間にある UI Automation ツリー内のすべての要素が含まれます。
例
この例は、画像リンクを含むテキストストリームを示しています。リンクは画像の子ですが、両方とも同じテキスト範囲にまたがっており、テキストストリーム内で埋め込みオブジェクトとして公開されます。
Hello <Image Link> World
- 画像とリンクの両方がストリームの ITextProvider の子孫でもあり、いずれも ITextProvider::RangeFromChild の呼び出しで childElement として指定できます。
- 画像またはリンクのいずれかを使用して ITextRangeProvider::RangeFromChild を呼び出すと、同じテキスト範囲(Range1)が返されます。
- ITextRangeProvider::GetChildren はリンクを返しません。
- ITextRangeProvider::GetEnclosingElement は、どのテキスト範囲に対しても画像を返しません。
- Range1 に対する ITextRangeProvider::GetEnclosingElement はリンクを返します。
- Range1 に対する ITextRangeProvider::GetChildren は子を返しません。
- ストリームの ITextProvider のテキスト範囲に対する ITextRangeProvider::GetEnclosingElement はプロバイダーを返します。
- ストリームの ITextProvider のテキスト範囲に対する ITextRangeProvider::GetChildren は画像のみを返します。
この例は、テキストに囲まれた 2 セルのテーブルを含むテキストストリームを示しています。
Start text
Table Cell 1 Table Cell 2 End Text
- ケース 1: ストリームの ITextProvider とテキスト範囲全体
- テキスト範囲全体に対する ITextRangeProvider::GetEnclosingElement は、ストリームの ITextProvider を返します。
- GetChildren は、ストリームの ITextProvider のすべての子要素を返します。この場合はテーブル要素のみです。
- ケース 2: テーブル要素に対して ITextProvider::RangeFromChild を呼び出して取得したテキスト範囲:
- ITextRangeProvider::GetEnclosingElement はテーブル要素を返します。
- ITextRangeProvider::GetChildren は両方のテーブルセルを返します。
- ケース 3: Table Cell 1 Table Cell 2 の視覚的コンテンツにまたがるテキスト範囲:
- ITextRangeProvider::GetEnclosingElement はテーブル要素を返します。
- ITextRangeProvider::GetChildren は両方のテーブルセルを返します。
- ケース 4: Table Cell 1 の単語 Cell にまたがるテキスト範囲:
- ITextRangeProvider::GetEnclosingElement は最初のセル要素を返します。
- ITextRangeProvider::GetChildren は要素を返しません。
- ケース 5: 両方の開始点(テーブルと最初のセル)を表す縮退した(空の)テキスト範囲:
- ITextRangeProvider::GetEnclosingElement は最初のセル要素(縮退範囲を含む範囲を持つ最も内側の要素)を返します。
- ITextRangeProvider::GetChildren は要素を返しません。
- ケース 1: ストリームの ITextProvider とテキスト範囲全体
指定した画面座標に最も近い縮退した(空の)テキスト範囲を返します。
| point | UiaPoint | in | 画面座標での位置。 |
| pRetVal | ITextRangeProvider** | out | 指定した位置に最も近い縮退した(空の)テキスト範囲へのポインターを受け取ります。このパラメーターは初期化せずに渡されます。 |
戻り値
解説(Remarks)
画面座標が画像、ハイパーリンク、またはその他の埋め込みオブジェクトの座標内にある場合、子オブジェクトを囲むテキスト範囲が返されます。
非表示のテキストは ITextProvider::RangeFromPoint によって無視されないため、指定したポイントに最も近い可視テキストから縮退範囲が返されます。
このプロパティが NULL を返すことはありません。
ドキュメントのメインテキストを囲むテキスト範囲を取得します。(ITextProvider.get_DocumentRange)
| pRetVal | ITextRangeProvider** | out | ドキュメント全体を表すテキスト範囲を受け取る ITextRangeProvider へのポインタのポインタである。 |
解説(Remarks)
ヘッダー、脚注、注釈などの一部の補助テキストは含まれない場合があります。
コントロールがサポートするテキスト選択の種類を指定する値を取得します。(ITextProvider.get_SupportedTextSelection)
| pRetVal | SupportedTextSelection* | out | サポートするテキスト選択の種類(なし・単一・複数)を示す SupportedTextSelection 値を受け取るポインタである。 |
解説(Remarks)
パラメーター
pRetVal[out]この関数が返されるとき、SupportedTextSelection オブジェクトへのポインターが格納されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITextProvider "{3589C92C-63F3-4367-99BB-ADA653B77CF2}" #usecom global ITextProvider IID_ITextProvider "{}" #comfunc global ITextProvider_GetSelection 3 var #comfunc global ITextProvider_GetVisibleRanges 4 var #comfunc global ITextProvider_RangeFromChild 5 sptr,sptr #comfunc global ITextProvider_RangeFromPoint 6 int,sptr #comfunc global ITextProvider_get_DocumentRange 7 sptr #comfunc global ITextProvider_get_SupportedTextSelection 8 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITextProvider "{3589C92C-63F3-4367-99BB-ADA653B77CF2}" #usecom global ITextProvider IID_ITextProvider "{}" #comfunc global ITextProvider_GetSelection 3 sptr #comfunc global ITextProvider_GetVisibleRanges 4 sptr #comfunc global ITextProvider_RangeFromChild 5 sptr,sptr #comfunc global ITextProvider_RangeFromPoint 6 int,sptr #comfunc global ITextProvider_get_DocumentRange 7 sptr #comfunc global ITextProvider_get_SupportedTextSelection 8 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。