ITfRange
COM公式ドキュメント
ITfRange インターフェイスは、テキストサービスやアプリケーションが、指定されたコンテキスト内のテキストを参照し操作するために使用します。インターフェイス ID は IID_ITfRange です。
解説(Remarks)
このインターフェイスは TSF マネージャーが実装します。範囲 (レンジ)、アンカー、埋め込みオブジェクト、その他 TSF が使用するテキストプロパティの詳細については、Ranges、Embedded Objects、および Using Text Services Framework 内の各トピックを参照してください。
例
ITfComposition コンポジションオブジェクトのインスタンスを生成すると、次のコード例のように ITfComposition::GetRange メソッドを呼び出して ITfRange インターフェイスポインターへのポインターを取得できます。
HRESULT hr;
ITfComposition *pComposition;
ITfRange *pRange;
WCHAR *achBuffer[64]; // テキストを受け取るバッファー。
ULONG cch;
hr = pComposition->GetRange(&pRange);
if(SUCCEEDED(hr))
{
// テキストを走査するループ:
do
{
cch = ARRAYSIZE(achBuffer);
hr = pRange->GetText(ec, TF_TF_MOVESTART | TF_TF_IGNOREEND, achBuffer, cch, &cch);
if(SUCCEEDED(hr))
{
// テキストに対して何らかの処理を行う。
pRange->Release();
}
}
while (cch == ARRAYSIZE(achBuffer));
pComposition->Release();
}
現在の ITfRange オブジェクトへのポインターは、TF_SELECTION 構造体の <range> 要素から取得できます。
メソッド 22
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITfRange::GetText メソッドは、このテキスト範囲 (レンジ) が対象とする内容を取得します。
| ec | DWORD | in | 編集コンテキストを識別する編集クッキー。ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。 | ||||||
| dwFlags | DWORD | in | オプションの動作を指定するビットフィールド。
| ||||||
| pchText | LPWSTR | out | 範囲内のテキストを受け取るバッファーへのポインター。 | ||||||
| cchMax | DWORD | in | テキストバッファーの最大サイズ。 | ||||||
| pcch | DWORD* | out | pchText テキストバッファーに書き込まれた文字数を表す ULONG へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 |
ITfRange::SetText メソッドは、テキスト範囲 (レンジ) が対象とする内容を置き換えます。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別します。 |
| dwFlags | DWORD | in | 内容の修正に関するオプションの動作を指定します。TF_ST_CORRECTION の値が設定されている場合、この操作は新規内容の作成ではなく既存内容の修正として扱われ、元のテキストプロパティが保持されます。 |
| pchText | LPWSTR | in | 範囲の内容を置き換えるテキストを格納したバッファーへのポインター。 |
| cch | INT | in | pchText の文字数を格納します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| コンテキストの所有者が既定のコンポジションを拒否しました。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り/書き込みロックを保持していません。 | |
| 範囲が呼び出し元のアクティブなコンポジション内にありません。 |
解説(Remarks)
範囲が複数のリージョンにまたがる場合は、リージョンごとに個別に ITfRange::SetText を呼び出してください。そうしないとメソッドが失敗することがあります。
既定では、テキストサービスは範囲を対象とする一時的なコンポジションを開始および終了し、編集されたテキストに対するコンポジションをコンテキストの所有者が一貫して認識できるようにします。コンポジションの所有者が既定のコンポジションを拒否した場合、メソッドは TF_E_COMPOSITION_REJECTED を返します。既定のコンポジションは、呼び出し元がまだコンポジションを開始していない場合にのみ作成されます。呼び出し元がアクティブなコンポジションを保持している場合、呼び出しは失敗します。
TF_CHAR_EMBEDDED オブジェクトのプレースホルダー文字は、このメソッドに渡せない場合があります。代わりに ITfRange::InsertEmbedded を使用してください。
テキストを挿入する場合、ITFInsertAtSelection:InsertTextAtSelection メソッドは選択範囲の割り当てを必要とせず、範囲が選択と一致していなければならないという制約も回避できます。
ITfRange::GetFormattedText メソッドは、テキスト範囲 (レンジ) に含まれる書式付きの内容を取得します。内容は IDataObject インターフェイスをサポートするオブジェクトにパッケージ化されます。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 |
| ppDataObject | IDataObject** | out | 書式付きの内容を含むオブジェクトを受け取る IDataObject ポインターへのポインター。書式付きの内容は STGMEDIUM のグローバルメモリハンドルを使用して取得されます。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| コンテキストの所有者は、書式付きテキストを IDataObject オブジェクトとしてエクスポートする機能をサポートしていません。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 |
解説(Remarks)
IDataObject の形式と格納方法は、その範囲が属するアプリケーションによって決定されます。
ITfRange::GetEmbedded メソッドは、テキストストリーム内の TS_CHAR_EMBEDDED 文字に対応する内容を取得します。テキスト範囲 (レンジ) の開始アンカーは、対象となる文字の直前に配置されます。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 | ||||||||||
| rguidService | GUID* | in | 埋め込みの内容をどのように取得するかを指定する識別子。
| ||||||||||
| riid | GUID* | in | 要求するオブジェクトのインターフェイスの UUID。 | ||||||||||
| ppunk | IUnknown** | out | オブジェクトへのポインター。riid に合わせてキャストできます。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| 実装側のアプリケーションは、テキストストリーム内で埋め込みオブジェクトを公開していません。 | |
| オブジェクトは要求されたインターフェイスをサポートしていません。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 | |
| 範囲の開始アンカーが TF_CHAR_EMBEDDED 文字の直前に配置されていません。 | |
| rguidService に対応する内容を返せません。 |
解説(Remarks)
取得したオブジェクトが特定のインターフェイスをサポートしていない場合もありますが、IOleObject、IDataObject、IViewObject、IPersistStorage、IOleCache、IDispatch など、埋め込みドキュメントやコントロールに関連するインターフェイスはサポートしている可能性が高いです。呼び出し元は QueryInterface を使用して必要なインターフェイスを調べる必要があります。メソッドが成功しても riid が NULL の場合、アプリケーションは埋め込みオブジェクトの存在を示していますが、オブジェクト自体は公開していません。それでもテキストプロセッサーは、単語区切りの可能性についての通知から利益を得られます。
ITfRange::InsertEmbedded メソッドは、テキスト範囲 (レンジ) の開始アンカーの位置にオブジェクトを挿入します。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 |
| dwFlags | DWORD | in | 挿入をどのように行うかを指定するビットフィールド。TF_IE_CORRECTION が設定されている場合、この操作は修正として扱われ、他のテキストサービスが元のテキストに関連付けられたデータを保持できるようになります。 |
| pDataObject | IDataObject* | in | 挿入するデータ転送オブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 実装側のアプリケーションは、ストリーム内で埋め込みオブジェクトを公開していません。 | |
| コンテキストの所有者が既定のコンポジションを拒否しました。 | |
| コンテキストの所有者は、指定されたオブジェクトの型を扱えません。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 | |
| 呼び出し元は既にアクティブなコンポジションを保持していますが、範囲がそのコンポジションの対象外のテキスト上に位置しています。 | |
| ドキュメント、または範囲の位置を変更できません。 |
解説(Remarks)
TF_CHAR_EMBEDDED オブジェクトのプレースホルダー文字は ITfRange::SetText に渡せないため、テキストストリームにオブジェクトを挿入するにはこのメソッドを使用します。このメソッドは OLE のクリップボード API をモデルにしており、アプリケーションは OleGetClipboard から返される IDataObject と同じように pDataObject を使用します。
範囲が複数のリージョンにまたがる場合は、リージョンごとに個別にこのメソッドを呼び出してください。そうしないとメソッドが失敗することがあります。
既定では、テキストサービスは範囲を対象とする一時的なコンポジションを開始および終了し、編集されたテキストに対するコンポジションをコンテキストの所有者が一貫して認識できるようにします。コンポジションの所有者が既定のコンポジションを拒否した場合、メソッドは TF_E_COMPOSITION_REJECTED を返します。既定のコンポジションは、呼び出し元がまだコンポジションを開始していない場合にのみ作成されます。呼び出し元がアクティブなコンポジションを保持している場合、呼び出しは失敗します。
コンテキストの所有者が特定のオブジェクトの挿入をサポートしているかどうかを事前に確認するには、ITfQueryEmbedded::QueryInsertEmbedded を使用してください。
ITfRange::ShiftStart メソッド
| ec | DWORD | in | 編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。 |
| cchReq | INT | in | 開始アンカーを移動する文字数を格納します。負の値を指定するとアンカーは後方へ、正の値を指定すると前方へ移動します。 |
| pcch | INT* | out | アンカーが実際に移動した文字数を受け取る LONG 値へのポインター。 |
| pHalt | TF_HALTCOND* | in | 移動に関する条件を格納する TF_HALTCOND 構造体へのポインター。このパラメーターは省略可能で、NULL を指定できます。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| 不特定のエラーが発生しました。 | |
| ec で識別される編集コンテキストが読み取り専用ロックを保持していません。 |
解説(Remarks)
範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。
このメソッドでは、アンカーをリージョンの境界を越えて移動することはできません。移動がリージョンの境界に達した場合、実際に移動した文字数は要求された数より少なくなります。隣接するリージョンへアンカーを移動するには ITfRange::ShiftStartRegion を使用します。
移動操作によって範囲の開始アンカーが終了アンカーを越えた場合、終了アンカーは開始アンカーと同じ位置に移動されます。
ITfRange::ShiftStart は時間のかかる操作になることがあります。パフォーマンスを向上させるため、可能な場合は ITfRange::ShiftStartToRange を使用してください。
ITfRange::ShiftEnd メソッド
| ec | DWORD | in | 編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。 |
| cchReq | INT | in | 終了アンカーを移動する文字数を格納します。負の値を指定するとアンカーは後方へ、正の値を指定すると前方へ移動します。 |
| pcch | INT* | out | アンカーが実際に移動した文字数を受け取る LONG 値へのポインター。 |
| pHalt | TF_HALTCOND* | in | 移動に関する条件を格納する TF_HALTCOND 構造体へのポインター。このパラメーターは省略可能で、NULL を指定できます。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| ec で識別される編集コンテキストが読み取り専用ロックを保持していません。 |
解説(Remarks)
範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。
このメソッドでは、アンカーをリージョンの境界を越えて移動することはできません。移動がリージョンの境界に達した場合、実際に移動した文字数は要求された数より少なくなります。隣接するリージョンへアンカーを移動するには ITfRange::ShiftEndRegion を使用します。
移動操作によって範囲の終了アンカーが開始アンカーを越えた場合、開始アンカーは終了アンカーと同じ位置に移動されます。
ITfRange::ShiftEnd は時間のかかる操作になることがあります。パフォーマンスを向上させるため、可能な場合は ITfRange::ShiftEndToRange を使用してください。
ITfRange::ShiftStartToRange メソッド
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。 |
| pRange | ITfRange* | in | 開始アンカーの移動先となるアンカーを持つ ITfRange インターフェイスへのポインター。 |
| aPos | TfAnchor | in | 開始アンカーを pRange のどのアンカーへ移動するかを指定する TfAnchor 値のいずれかを格納します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pRange が無効です。 | |
| 不特定のエラーが発生しました。 | |
| ec で識別される編集コンテキストが読み取り専用ロックを保持していません。 |
解説(Remarks)
範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。
移動操作によって範囲の開始アンカーが終了アンカーを越えた場合、終了アンカーは開始アンカーと同じ位置に移動されます。
このメソッドは ITfRange::ShiftStart よりも効率的であり、可能な場合はこちらを使用してください。
ITfRange::ShiftEndToRange メソッド
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。 |
| pRange | ITfRange* | in | 終了アンカーの移動先となるアンカーを持つ ITfRange インターフェイスへのポインター。 |
| aPos | TfAnchor | in | 終了アンカーを pRange のどのアンカーへ移動するかを指定する TfAnchor 値のいずれかを格納します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pRange が無効です。 | |
| 不特定のエラーが発生しました。 | |
| ec で識別される編集コンテキストが読み取り専用ロックを保持していません。 |
解説(Remarks)
範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。
移動操作によって範囲の終了アンカーが開始アンカーを越えた場合、開始アンカーは終了アンカーと同じ位置に移動されます。
このメソッドは ITfRange::ShiftEnd よりも効率的であり、こちらを使用してください。
ITfRange::ShiftStartRegion メソッド
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。 |
| dir | TfShiftDir | in | 開始アンカーを隣接するどのリージョンへ移動するかを指定する TfShiftDir 値のいずれかを格納します。 |
| pfNoRegion | BOOL* | out | アンカーが別のリージョンに隣接して配置されているかどうかを示すフラグを受け取る BOOL へのポインター。アンカーが別のリージョンに隣接していない場合は 0 以外の値、隣接している場合は 0 を受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pfNoRegion が無効です。 | |
| ec で識別される編集コンテキストが読み取り専用ロックを保持していません。 |
解説(Remarks)
範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。
このメソッドを呼び出す前に、アンカーが目的のリージョンに隣接して配置されている必要があります。隣接していない場合、pfNoRegion は 0 以外の値を受け取り、アンカーは移動しません。アンカーが目的のリージョンに隣接している場合、pfNoRegion は 0 を受け取り、アンカーはそのリージョンへ移動されます。
ITfRange::ShiftEndRegion メソッド
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。 |
| dir | TfShiftDir | in | 終了アンカーを隣接するどのリージョンへ移動するかを指定する TfShiftDir 値のいずれかを格納します。 |
| pfNoRegion | BOOL* | out | アンカーが別のリージョンに隣接して配置されているかどうかを示すフラグを受け取る BOOL 値へのポインター。アンカーが別のリージョンに隣接していない場合は 0 以外の値、隣接している場合は 0 を受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pfNoRegion が無効です。 | |
| ec で識別される編集コンテキストが読み取り専用ロックを保持していません。 |
解説(Remarks)
範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。
このメソッドを呼び出す前に、アンカーが目的のリージョンに隣接して配置されている必要があります。隣接していない場合、pfNoRegion は 0 以外の値を受け取り、アンカーは移動しません。アンカーが目的のリージョンに隣接している場合、pfNoRegion は 0 を受け取り、アンカーはそのリージョン内へ移動されます。
ITfRange::IsEmpty メソッドは、開始アンカーと終了アンカーが同じ位置にあることによってテキスト範囲 (レンジ) が空であるかどうかを確認します。
| ec | DWORD | in | 編集コンテキストを識別する編集クッキー。ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。 |
| pfEmpty | BOOL* | out | ブール値へのポインター。TRUE は範囲が空であること、FALSE は範囲が空でないことを示します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| ec パラメーターの値が無効なクッキーです。 |
ITfRange::Collapse メソッドは、開始アンカーと終了アンカーを同じ位置に移動することで、テキスト範囲 (レンジ) を空にします。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 | ||||||
| aPos | TfAnchor | in | 範囲をどのように折りたたむかを指定する TfAnchor 列挙体。
|
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| オブジェクトがインターフェイスをサポートしていないか、新しい範囲を作成できません。 | |
| aPos が無効です。 | |
| ec のクッキーが無効であるか、呼び出し元が読み取り専用ロックを保持していません。 |
ITfRange::IsEqualStart メソッドは、このテキスト範囲 (レンジ) の開始アンカーが、指定された別の範囲のアンカーと一致するかどうかを確認します。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 | ||||||
| pWith | ITfRange* | in | この範囲の開始アンカーと比較するアンカーを持つ、指定された範囲へのポインター。 | ||||||
| aPos | TfAnchor | in | 指定された pWith 範囲のどのアンカーをこの範囲の開始アンカーと比較するかを示す列挙値。
| ||||||
| pfEqual | BOOL* | out | ブール値へのポインター。戻り時に TRUE は、指定された pWith 範囲のアンカーがこの範囲の開始アンカーと一致することを示します。FALSE は一致しないことを示します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 |
解説(Remarks)
このメソッドは ITfRange::CompareStart と同一の機能を持ちますが、より効率的です。
ITfRange::IsEqualStart メソッドは、このテキスト範囲 (レンジ) の終了アンカーが、指定された別の範囲のアンカーと一致するかどうかを確認します。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 | ||||||
| pWith | ITfRange* | in | この範囲の終了アンカーと比較するアンカーを持つ、指定された範囲へのポインター。 | ||||||
| aPos | TfAnchor | in | 指定された pWith 範囲のどのアンカーをこの範囲の終了アンカーと比較するかを示す列挙値。
| ||||||
| pfEqual | BOOL* | out | ブール値へのポインター。戻り時に TRUE は、指定された pWith 範囲のアンカーがこの範囲の終了アンカーと一致することを示します。FALSE は一致しないことを示します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 |
解説(Remarks)
このメソッドは、この範囲の終了アンカーを指定された別の範囲のアンカーと比較する点を除き、ITfRange::IsEqualStart と同一です。
このメソッドは ITfRange::CompareEnd と機能的に同等ですが、より効率的です。
ITfRange::CompareStart メソッドは、このテキスト範囲 (レンジ) の開始アンカーの位置を、別の範囲のアンカーと比較します。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 | ||||||||
| pWith | ITfRange* | in | この範囲の開始アンカーと比較するアンカーを持つ、指定された範囲へのポインター。 | ||||||||
| aPos | TfAnchor | in | 指定された pWith 範囲のどのアンカーをこの範囲の開始アンカーと比較するかを示す列挙値。
| ||||||||
| plResult | INT* | out | この範囲の開始アンカーと、指定された pWith 範囲のアンカーとの比較結果へのポインター。
|
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 |
解説(Remarks)
このメソッドは、2 つのアンカーが同一のリージョン内にある場合を除き、0 を返すことはありません。2 つのアンカーが同じ位置にあるかどうかだけを知りたい場合は、ITfRange::IsEqualStart の方が効率的です。
ITfRange::CompareEnd メソッドは、このテキスト範囲 (レンジ) の終了アンカーの位置を、別の範囲のアンカーと比較します。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 | ||||||||
| pWith | ITfRange* | in | この範囲の終了アンカーと比較するアンカーを持つ、指定された範囲へのポインター。 | ||||||||
| aPos | TfAnchor | in | 指定された pWith 範囲のどのアンカーをこの範囲の終了アンカーと比較するかを示す列挙値。
| ||||||||
| plResult | INT* | out | この範囲の終了アンカーと、指定された pWith 範囲のアンカーとの比較結果へのポインター。
|
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 |
解説(Remarks)
このメソッドは、2 つのアンカーが同一のリージョン内にある場合を除き、0 を返すことはありません。2 つのアンカーが同じ位置にあるかどうかだけを知りたい場合は、ITfRange::IsEqualEnd の方が効率的です。
このメソッドは、この範囲の終了アンカーを指定された別の範囲のアンカーと比較する点を除き、ITfRange::CompareStart と同一です。
ITfRange::AdjustForInsert メソッドは、テキストの挿入に合わせてテキスト範囲 (レンジ) を拡張または縮小します。
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。 |
| cchInsert | DWORD | in | 挿入されるテキストの文字数。この文字数は、この後の ITfRange::SetText の呼び出しで使用されます。文字数が不明な場合は 0 を指定できます。 |
| pfInsertOk | BOOL* | out | コンテキストの所有者が挿入を受け入れる (TRUE) か拒否する (FALSE) かを示すフラグへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メソッドが失敗しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| アプリケーションは選択を置き換えることができませんでした。 | |
| ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。 |
解説(Remarks)
編集を開始する前に、新しいコンポジションを開始するための範囲を準備する目的でこのメソッドを使用してください。使用するのは、テキストが現在の選択位置に挿入されない場合に限ります。テキストを現在の選択位置に挿入する場合は、ITFInsertAtSelection:InsertTextAtSelection または ITfInsertAtSelection::InsertEmbeddedAtSelection を使用するのが適切です。
コンテキストの所有者は、動作を保持し一貫したユーザー体験を維持するためにこのメソッドを利用できます。たとえば、コンテキスト内の特定の文字やオブジェクトを変更から保護したり、上書き入力をサポートしたりできます。
既存のコンポジションを変更する場合、このメソッドは不要です。呼び出し元が以前に入力したテキストを変更するには、ITfRange::SetText を直接呼び出しても問題ありません。
戻り時に *pfInsertOk が FALSE に設定されている場合、この範囲を用いた以降の ITfRange::SetText または ITfRange::InsertEmbedded の呼び出しは失敗する可能性が高くなります。それ以外の場合、*pfInsertOk は TRUE に設定され、範囲の開始アンカーまたは終了アンカーはコンテキストの所有者の判断で再配置されることがあります。
ITfRange::GetGravity メソッド
| pgStart | TfGravity* | out | 開始アンカーのグラビティを受け取る TfGravity 値へのポインター。 |
| pgEnd | TfGravity* | out | 終了アンカーのグラビティを受け取る TfGravity 値へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 |
ITfRange::SetGravity メソッド
| ec | DWORD | in | ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。 |
| gStart | TfGravity | in | 開始アンカーのグラビティを指定する TfGravity 値のいずれかを格納します。 |
| gEnd | TfGravity | in | 終了アンカーのグラビティを指定する TfGravity 値のいずれかを格納します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| ec のクッキーが無効です。 |
ITfRange::Clone メソッドは、このテキスト範囲 (レンジ) を複製します。
| ppClone | ITfRange** | out | この範囲を参照する新しい範囲オブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メソッドは新しい範囲へのポインターを生成できませんでした。 |
解説(Remarks)
生成された新しい範囲オブジェクトは、元の範囲に影響を与えずに変更できます。ただし、新しい範囲を含むドキュメントを変更すると、元の範囲のアンカーが再配置される場合があります。
元の範囲のグラビティは、新しい範囲にも引き継がれます。
ITfRange::GetContext メソッド
| ppContext | ITfContext** | out | この範囲が属するコンテキストオブジェクトを受け取る ITfContext インターフェイスポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ppContext が無効です。 | |
| 不特定のエラーが発生しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITfRange "{AA80E7FF-2021-11D2-93E0-0060B067B86E}" #usecom global ITfRange IID_ITfRange "{}" #comfunc global ITfRange_GetText 3 int,int,var,int,var #comfunc global ITfRange_SetText 4 int,int,wstr,int #comfunc global ITfRange_GetFormattedText 5 int,sptr #comfunc global ITfRange_GetEmbedded 6 int,var,var,sptr #comfunc global ITfRange_InsertEmbedded 7 int,int,sptr #comfunc global ITfRange_ShiftStart 8 int,int,var,var #comfunc global ITfRange_ShiftEnd 9 int,int,var,var #comfunc global ITfRange_ShiftStartToRange 10 int,sptr,int #comfunc global ITfRange_ShiftEndToRange 11 int,sptr,int #comfunc global ITfRange_ShiftStartRegion 12 int,int,var #comfunc global ITfRange_ShiftEndRegion 13 int,int,var #comfunc global ITfRange_IsEmpty 14 int,var #comfunc global ITfRange_Collapse 15 int,int #comfunc global ITfRange_IsEqualStart 16 int,sptr,int,var #comfunc global ITfRange_IsEqualEnd 17 int,sptr,int,var #comfunc global ITfRange_CompareStart 18 int,sptr,int,var #comfunc global ITfRange_CompareEnd 19 int,sptr,int,var #comfunc global ITfRange_AdjustForInsert 20 int,int,var #comfunc global ITfRange_GetGravity 21 var,var #comfunc global ITfRange_SetGravity 22 int,int,int #comfunc global ITfRange_Clone 23 sptr #comfunc global ITfRange_GetContext 24 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITfRange "{AA80E7FF-2021-11D2-93E0-0060B067B86E}" #usecom global ITfRange IID_ITfRange "{}" #comfunc global ITfRange_GetText 3 int,int,sptr,int,sptr #comfunc global ITfRange_SetText 4 int,int,wstr,int #comfunc global ITfRange_GetFormattedText 5 int,sptr #comfunc global ITfRange_GetEmbedded 6 int,sptr,sptr,sptr #comfunc global ITfRange_InsertEmbedded 7 int,int,sptr #comfunc global ITfRange_ShiftStart 8 int,int,sptr,sptr #comfunc global ITfRange_ShiftEnd 9 int,int,sptr,sptr #comfunc global ITfRange_ShiftStartToRange 10 int,sptr,int #comfunc global ITfRange_ShiftEndToRange 11 int,sptr,int #comfunc global ITfRange_ShiftStartRegion 12 int,int,sptr #comfunc global ITfRange_ShiftEndRegion 13 int,int,sptr #comfunc global ITfRange_IsEmpty 14 int,sptr #comfunc global ITfRange_Collapse 15 int,int #comfunc global ITfRange_IsEqualStart 16 int,sptr,int,sptr #comfunc global ITfRange_IsEqualEnd 17 int,sptr,int,sptr #comfunc global ITfRange_CompareStart 18 int,sptr,int,sptr #comfunc global ITfRange_CompareEnd 19 int,sptr,int,sptr #comfunc global ITfRange_AdjustForInsert 20 int,int,sptr #comfunc global ITfRange_GetGravity 21 sptr,sptr #comfunc global ITfRange_SetGravity 22 int,int,int #comfunc global ITfRange_Clone 23 sptr #comfunc global ITfRange_GetContext 24 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。