Win32 API 日本語リファレンス
ホームUI.TextServices › ITfReadOnlyProperty

ITfReadOnlyProperty

COM
IID17d49a3d-f8b8-4b2f-b254-52319dd64c53継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ITfReadOnlyProperty インターフェイスは TSF マネージャーによって実装され、アプリケーションまたはテキストサービスがプロパティのデータを取得するために使用します。

解説(Remarks)

このインターフェイスのインスタンスは、ITfContext::GetAppProperty または ITfContext::TrackProperties を使用して取得します。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetType(GUID* pguid)

ITfReadOnlyProperty::GetType メソッド

pguidGUID*out

プロパティの型識別子を受け取る GUID 値へのポインターです。これは、プロパティが登録された際にプロパティプロバイダーが ITfCategoryMgr::RegisterCategory に渡した値です。次のいずれかの値になります。

意味
GUID_TFCAT_PROPSTYLE_STATIC
プロパティは静的プロパティです。
GUID_TFCAT_PROPSTYLE_STATICCOMPACT
プロパティは静的コンパクトプロパティです。
GUID_TFCAT_PROPSTYLE_CUSTOM
プロパティはカスタムプロパティです。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pguid が無効です。
E_FAIL
不特定のエラーが発生しました。
vtbl 4 HRESULT EnumRanges(DWORD ec, IEnumTfRanges** ppEnum, ITfRange* pTargetRange)

ITfReadOnlyProperty::EnumRanges メソッド

ecDWORDin編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。
ppEnumIEnumTfRanges**out列挙子オブジェクトを受け取る IEnumTfRanges インターフェイスポインターへのポインターです。呼び出し元は、不要になった時点でこのオブジェクトを解放する必要があります。
pTargetRangeITfRange*in一意なプロパティ値を走査する対象の範囲 (レンジ) を指定する ITfRange インターフェイスへのポインターです。このパラメーターは省略可能で、NULL を指定できます。詳細については「解説」を参照してください。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_OUTOFMEMORY
メモリの割り当てに失敗しました。
E_FAIL
不特定のエラーが発生しました。
注意 アプリケーションが ITextStoreACP::FindNextAttrTransition を実装していない場合、ITfReadOnlyProperty::EnumRanges は E_FAIL で失敗します。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックまたは読み書きロックを保持していません。

解説(Remarks)

注意: アプリケーションが ITextStoreACP::FindNextAttrTransition を実装していない場合、ITfReadOnlyProperty::EnumRangesE_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"

pTargetRangeNULL の場合、列挙子はコンテキスト内で空でないプロパティ値を含む最初の範囲から最後の範囲までを対象とします。上記の例で pTargetRangeNULL を指定すると、列挙子には 3 つの範囲が含まれます。

範囲のインデックス 色プロパティの値 範囲内のテキスト
0 R "is"
1 <empty> " some "
2 G "colored "

列挙される範囲は、pTargetRange の開始アンカーと終了アンカーで始まり、そこで終わります。これは、いずれかのアンカーがプロパティの途中に位置している場合でも同様です。

vtbl 5 HRESULT GetValue(DWORD ec, ITfRange* pRange, VARIANT* pvarValue)

ITfReadOnlyProperty::GetValue メソッド

ecDWORDin編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。
pRangeITfRange*inプロパティを取得する対象の範囲 (レンジ) を指定する ITfRange インターフェイスへのポインターです。
pvarValueVARIANT*outプロパティ値を受け取る VARIANT 値へのポインターです。この値のデータ型と内容はプロパティの所有者が定義するため、呼び出し元がこの値を利用するには、その内容を認識できる必要があります。呼び出し元は、不要になった時点でこの値を VariantClear API に渡してデータを解放する必要があります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
範囲がプロパティで覆われていないか、範囲に複数のプロパティ値が含まれています。pvarValueVT_EMPTY 値を受け取ります。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_FAIL
不特定のエラーが発生しました。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックまたは読み書きロックを保持していません。

解説(Remarks)

pRange の範囲にプロパティの値が存在しない場合、pRange にそのプロパティの値が複数含まれる場合、またはプロパティが pRange 全体を覆っていない場合、pvarValueVT_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-->|             |<-
vtbl 6 HRESULT GetContext(ITfContext** ppContext)

ITfReadOnlyProperty::GetContext メソッド

ppContextITfContext**outコンテキストオブジェクトを受け取る ITfContext インターフェイスポインターへのポインターです。呼び出し元は、不要になった時点でこのオブジェクトを解放する必要があります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppContext が無効です。
E_FAIL
不特定のエラーが発生しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。