IAnchor
COM公式ドキュメント
IAnchor インターフェイスは TSF マネージャーによって実装されます。Microsoft Active Accessibility のクライアントは、IAnchor アンカー オブジェクトを使用して、テキスト ストリーム内のテキスト範囲(レンジ)を区切ります。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IAnchor::SetGravity メソッド
| gravity | TsGravity | in | アンカーの新しい gravity(前方または後方)を指定する TsGravity 列挙型の値を格納します。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
IAnchor::GetGravity メソッドは、IAnchor オブジェクト内のアンカーの gravity を取得します。
| pgravity | TsGravity* | out | アンカーの gravity を示す TsGravity 値を受け取るポインターです。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pgravity ポインターが無効です。 |
IAnchor::IsEqual メソッドは、テキスト ストリーム内の 2 つのアンカーを評価し、アンカー位置が等しいかどうかを示すブール値を返します。
| paWith | IAnchor* | in | 主アンカーと比較するアンカーを指定します。2 つのアンカー位置が等しいかどうかを判定するために使用します。 |
| pfEqual | BOOL* | out | 2 つのアンカーが同じ位置にあるかどうかを示すブール値です。TRUE の場合、2 つのアンカーは同じ位置にあります。FALSE の場合、2 つのアンカーは同じ位置にはありません。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pfEqual が無効です。 |
解説(Remarks)
アンカーは常に文字と文字の間、またはリージョン(領域)と領域の間に位置します。2 つのアンカーが同じ文字の間、すなわちテキスト ストリーム内の同じオフセットにあり、かつ同じ領域内にある場合、IAnchor::IsEqual は TRUE を返します。それ以外の場合は FALSE を返します。
IAnchor::Compare にも IAnchor::IsEqual と同じ機能が含まれています。ただし、IAnchor::IsEqual はより限定的であるため、サーバー側でより効率的に実装できます。
IAnchor::Compare メソッドは、テキスト ストリーム内の 2 つのアンカーの相対位置を比較します。
| paWith | IAnchor* | in | 主アンカーと比較するアンカー オブジェクトです。2 つのアンカーの相対位置を判定するために使用します。 | ||||||||
| plResult | INT* | out | 2 つのアンカーの位置を比較した結果です。
|
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| paWith が無効です。 | |
| plResult が無効です。 |
解説(Remarks)
*plResult に 0 が返されるのは、2 つのアンカーが同一の領域内にある場合のみです。アンカーの位置には領域と領域の間の空間も含まれます。2 つのアンカーが同じ位置にあるかどうかだけを判定したい場合は、IAnchor::IsEqual の方が効率的です。
IAnchor::Shift メソッドは、テキスト ストリーム内でアンカーを前方または後方に移動します。
| dwFlags | DWORD | in | アンカーの実際の移動を回避するために使用するビット フィールドです。
| ||||
| cchReq | INT | in | テキスト ストリーム内でアンカーを移動する文字数です。 | ||||
| pcch | INT* | out | テキスト ストリーム内で実際に移動した文字数です。メソッドが失敗した場合、pcch には 0 が設定されます。 | ||||
| paHaltAnchor | IAnchor* | in | 移動を阻止するアンカーへの参照です。移動の阻止を行わない場合は NULL を設定します。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 移動に失敗しました。 | |
| 入力パラメーターの値が無効です。 | |
| dwFlags パラメーターの値は、このメソッドでは実装されていません。 |
解説(Remarks)
cchReq および pcch パラメーターは負の値(テキスト ストリーム内での後方への移動)にも、正の値(前方への移動)にもなり得ます。ドキュメントの先頭または末尾に達した場合、領域の境界に達した場合、または paHaltAnchor に移動を阻止するアンカーが指定された場合、実際に移動する文字数は cchReq より少なくなることがあります。
paHaltAnchor に移動を阻止するアンカーが指定されている場合、アプリケーションは paHaltAnchor が示す位置で移動を打ち切ります。paHaltAnchor が移動の対象となるテキストの範囲内にない場合、移動には関係しないため無視されます。
たとえば、paHaltAnchor が参照するアンカーがストリーム内で対象のアンカーの 8 文字先にあるときに、クライアントが Shift (0, 10, pcch, paHaltAnchor) を呼び出した場合、戻り時にはアンカーは 8 文字だけ移動しています。paHaltAnchor が参照するアンカーが移動対象の現在のアンカーと等しい場合、Shift はアンカーをまったく移動せずに成功を返します。この場合、pcch は 0 になります。
アンカーの移動は、ドキュメントの先頭または末尾に達したときと同様に、常に領域の境界で阻止されます。これは、戻り時に実際の移動量 pcch の絶対値が要求した移動量 cchReq の絶対値より小さくなることで示されます。この場合、クライアントは IAnchor::ShiftRegion を使用して、アンカーを隣接する領域へ移動できます。
IAnchor::ShiftTo メソッドは、現在のアンカーを別のアンカーと同じ位置に移動します。
| paSite | IAnchor* | in | 現在のアンカーの移動先となる位置にあるアンカーです。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| paSite アンカーへの IAnchor インターフェイス ポインターを取得できなかったか、操作を安全に完了するにはメモリが不足しています。 | |
| paSite が無効です。 |
解説(Remarks)
通常、このメソッドの実装は、同等の IAnchor::Shift 操作よりも効率的です。
IAnchor::ShiftRegion メソッド
| dwFlags | DWORD | in | 非表示テキストの周辺でのアンカーの再配置を制御する、またはアンカーの実際の再配置を回避するために使用するビット フィールドです。
| ||||||
| dir | TsShiftDir | in | アンカーの移動先となる隣接領域を指定する TsShiftDir 値のいずれかを格納します。
| ||||||
| pfNoRegion | BOOL* | out | アンカーの移動が行われたかどうかを示すブール値です。
|
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 移動に失敗しました。 | |
| 入力パラメーターの値が無効です。 |
このメソッドは実装されていません。
| dwMask | DWORD | in | 使用しません。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| このメソッドは実装されていません。 |
IAnchor::GetChangeHistory メソッドは、アンカーの直前または直後で発生した削除の履歴を取得します。
| pdwHistory | ANCHOR_CHANGE_HISTORY_FLAGS* | out | アンカーの直前または直後で削除が発生したことを示すビット フィールド フラグです。次の値の一方または両方が設定されます。
|
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pdwHistory の値が無効です。 |
解説(Remarks)
アンカーに隣接する位置で削除が発生した場合は、pdwHistory の変更フラグを設定する必要があります。
変更フラグは、IAnchor::ClearChangeHistory の呼び出しによってクリアされるまで設定されたままになります。
IAnchor::ClearChangeHistory メソッドは、アンカーの変更履歴フラグをクリアします。
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
アプリケーションは、この呼び出しを受け取った後にアンカーの変更履歴フラグをクリアする必要があります。変更履歴フラグは IAnchor::GetChangeHistory によって設定されたものです。
IAnchor::Clone メソッドは、現在のアンカーと同じ位置、同じ gravity を持つ新しいアンカー オブジェクトを生成します。
| ppaClone | IAnchor** | out | 現在のアンカーと同一の、新しいアンカー オブジェクトです。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メソッドは失敗しました。 | |
| ppaClone が無効です。 |
解説(Remarks)
複製されたアンカーでは、変更履歴と変更履歴マスクの両方がクリアされます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAnchor "{0FEB7E34-5A60-4356-8EF7-ABDEC2FF7CF8}" #usecom global IAnchor IID_IAnchor "{}" #comfunc global IAnchor_SetGravity 3 int #comfunc global IAnchor_GetGravity 4 var #comfunc global IAnchor_IsEqual 5 sptr,var #comfunc global IAnchor_Compare 6 sptr,var #comfunc global IAnchor_Shift 7 int,int,var,sptr #comfunc global IAnchor_ShiftTo 8 sptr #comfunc global IAnchor_ShiftRegion 9 int,int,var #comfunc global IAnchor_SetChangeHistoryMask 10 int #comfunc global IAnchor_GetChangeHistory 11 var #comfunc global IAnchor_ClearChangeHistory 12 #comfunc global IAnchor_Clone 13 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAnchor "{0FEB7E34-5A60-4356-8EF7-ABDEC2FF7CF8}" #usecom global IAnchor IID_IAnchor "{}" #comfunc global IAnchor_SetGravity 3 int #comfunc global IAnchor_GetGravity 4 sptr #comfunc global IAnchor_IsEqual 5 sptr,sptr #comfunc global IAnchor_Compare 6 sptr,sptr #comfunc global IAnchor_Shift 7 int,int,sptr,sptr #comfunc global IAnchor_ShiftTo 8 sptr #comfunc global IAnchor_ShiftRegion 9 int,int,sptr #comfunc global IAnchor_SetChangeHistoryMask 10 int #comfunc global IAnchor_GetChangeHistory 11 sptr #comfunc global IAnchor_ClearChangeHistory 12 #comfunc global IAnchor_Clone 13 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。