ITfReadOnlyProperty
COM公式ドキュメント
ITfReadOnlyProperty インターフェイスは TSF マネージャーによって実装され、アプリケーションまたはテキストサービスがプロパティのデータを取得するために使用します。
解説(Remarks)
このインターフェイスのインスタンスは、ITfContext::GetAppProperty または ITfContext::TrackProperties を使用して取得します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITfReadOnlyProperty::GetType メソッド
| pguid | GUID* | out | プロパティの型識別子を受け取る GUID 値へのポインターです。これは、プロパティが登録された際にプロパティプロバイダーが ITfCategoryMgr::RegisterCategory に渡した値です。次のいずれかの値になります。
|
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pguid が無効です。 | |
| 不特定のエラーが発生しました。 |
ITfReadOnlyProperty::EnumRanges メソッド
| ec | DWORD | in | 編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。 |
| ppEnum | IEnumTfRanges** | out | 列挙子オブジェクトを受け取る IEnumTfRanges インターフェイスポインターへのポインターです。呼び出し元は、不要になった時点でこのオブジェクトを解放する必要があります。 |
| pTargetRange | ITfRange* | in | 一意なプロパティ値を走査する対象の範囲 (レンジ) を指定する ITfRange インターフェイスへのポインターです。このパラメーターは省略可能で、NULL を指定できます。詳細については「解説」を参照してください。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| メモリの割り当てに失敗しました。 | |
|
不特定のエラーが発生しました。
注意 アプリケーションが ITextStoreACP::FindNextAttrTransition を実装していない場合、ITfReadOnlyProperty::EnumRanges は E_FAIL で失敗します。
|
|
| ec で識別される編集コンテキストが読み取り専用ロックまたは読み書きロックを保持していません。 |
解説(Remarks)
注意: アプリケーションが ITextStoreACP::FindNextAttrTransition を実装していない場合、ITfReadOnlyProperty::EnumRanges は E_FAIL で失敗します。
このメソッドで取得される列挙子には、指定されたプロパティの一意な値ごとに 1 つの範囲 (レンジ) が含まれます。空の値も対象となります。たとえば、仮に色を表すプロパティがあり、次のようにマークアップされたテキストに適用されているとします。
COLOR: RR GGGGGGGG
TEXT: this is some colored text
pTargetRange にこの範囲を指定して ITfReadOnlyProperty::EnumRanges を呼び出すと、列挙子には 5 つの範囲が含まれます。
| 範囲のインデックス | 色プロパティの値 | 範囲のテキスト |
|---|---|---|
| 0 | <empty> | "this " |
| 1 | R | "is" |
| 2 | <empty> | " some " |
| 3 | G | "colored " |
| 4 | <empty> | "text" |
pTargetRange が NULL の場合、列挙子はコンテキスト内で空でないプロパティ値を含む最初の範囲から最後の範囲までを対象とします。上記の例で pTargetRange に NULL を指定すると、列挙子には 3 つの範囲が含まれます。
| 範囲のインデックス | 色プロパティの値 | 範囲内のテキスト |
|---|---|---|
| 0 | R | "is" |
| 1 | <empty> | " some " |
| 2 | G | "colored " |
列挙される範囲は、pTargetRange の開始アンカーと終了アンカーで始まり、そこで終わります。これは、いずれかのアンカーがプロパティの途中に位置している場合でも同様です。
ITfReadOnlyProperty::GetValue メソッド
| ec | DWORD | in | 編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。 |
| pRange | ITfRange* | in | プロパティを取得する対象の範囲 (レンジ) を指定する ITfRange インターフェイスへのポインターです。 |
| pvarValue | VARIANT* | out | プロパティ値を受け取る VARIANT 値へのポインターです。この値のデータ型と内容はプロパティの所有者が定義するため、呼び出し元がこの値を利用するには、その内容を認識できる必要があります。呼び出し元は、不要になった時点でこの値を VariantClear API に渡してデータを解放する必要があります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 範囲がプロパティで覆われていないか、範囲に複数のプロパティ値が含まれています。pvarValue は VT_EMPTY 値を受け取ります。 | |
| 1 つ以上のパラメーターが無効です。 | |
| 不特定のエラーが発生しました。 | |
| ec で識別される編集コンテキストが読み取り専用ロックまたは読み書きロックを保持していません。 |
解説(Remarks)
pRange の範囲にプロパティの値が存在しない場合、pRange にそのプロパティの値が複数含まれる場合、またはプロパティが pRange 全体を覆っていない場合、pvarValue は VT_EMPTY 値を受け取り、メソッドは S_FALSE を返します。
COLOR: RR GGGGGGGG
TEXT: this is some colored text
range-->||<-
COLOR: RR GGGGGGGG
TEXT: this is some colored text
range-->| |<-
COLOR: RR GGGGGGGG
TEXT: this is some colored text
range-->| |<-
ITfReadOnlyProperty::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_ITfReadOnlyProperty "{17D49A3D-F8B8-4B2F-B254-52319DD64C53}" #usecom global ITfReadOnlyProperty IID_ITfReadOnlyProperty "{}" #comfunc global ITfReadOnlyProperty_GetType 3 var #comfunc global ITfReadOnlyProperty_EnumRanges 4 int,sptr,sptr #comfunc global ITfReadOnlyProperty_GetValue 5 int,sptr,var #comfunc global ITfReadOnlyProperty_GetContext 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITfReadOnlyProperty "{17D49A3D-F8B8-4B2F-B254-52319DD64C53}" #usecom global ITfReadOnlyProperty IID_ITfReadOnlyProperty "{}" #comfunc global ITfReadOnlyProperty_GetType 3 sptr #comfunc global ITfReadOnlyProperty_EnumRanges 4 int,sptr,sptr #comfunc global ITfReadOnlyProperty_GetValue 5 int,sptr,sptr #comfunc global ITfReadOnlyProperty_GetContext 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。