ITextRange::SetChar メソッド (tom.h)
範囲の開始位置に文字を設定します。
構文
HRESULT SetChar(
long Char
);
パラメーター
Char
型: long
開始位置の文字の新しい値。
戻り値
種類: HRESULT
メソッドは HRESULT 値を返します。 メソッドが成功すると、 S_OKが返されます。 メソッドが失敗した場合は、次のいずれかのエラー コードが返されます。 COM エラー コードの詳細については、「COM でのエラー処理」を参照してください。
リターン コード | 説明 |
---|---|
|
テキストは書き込み保護されています。 |
|
メモリが不足しています。 |
注釈
ITextRange::SetChar を使用すると、使用する正確な文字コードを指定できます。 ただし、見た目が似たグリフを持つ文字列リテラルは誤解を招く可能性があります。
このメソッドによって設定される文字は、BSTR ではなく LONG です。 これにより、バッキング ストアに格納される方法 (バイト、単語、可変長など) が非表示になります。
自動単語折り返しがないシステムでは、多くの場合、ドキュメントには改行のためだけにハード キャリッジ リターンが挿入されます。 次のコードは、このようなハード キャリッジ リターンを範囲 r に関連付けられているストーリーの空白に戻す単純な方法を示していますが、完全ではありません。
Sub EnableWrap(r As ITextRange) // Convert false hard CRs to soft
r.SetRange 0, 0 // r is set at start of story
While r.Move(tomParagraph) // Go to start of next paragraph
If r.MoveWhile(C1_WHITE, 1) = 0 Then // Next char isn't white space
r.Move tomCharacter, -1
r.SetChar = Asc(" ") // Replace CR by blank
End If
Wend // Loop till no more CRs in story
End Sub
または、IF ループ内で次を使用することもできます。
r.MoveStart tomCharacter, -1 // Select previous char (the CR)
r = " " // Replace it with a blank
この方法では、テキストを他の幅に折り返します。 ただし、アルゴリズムは完璧ではありません。空白以外のもの (空白、タブ、改行、キャリッジ リターンなど) が続くハード キャリッジ リターンを空白に置き換える必要があることを前提としています。 また、このアルゴリズムでは、復帰文字が復帰文字や Unicode 段落末 (EOP) 0x2029文字などの 1 文字であると想定しています。 また、復帰と改行の組み合わせは一致せず、より多くのコードを記述して実行する必要があります (または を使用 FindText(^p)
します)。 もう 1 つの注意は、アルゴリズムが正しく機能しない場合 (コードとドキュメントの混在など) があることです。
ただし、 ITextRange::SetChar は、削除後に挿入によって実行される置換操作よりも効率的です。 したがって、 ITextRange::SetChar を使用せずにコードを書き換えると、おそらくはるかに遅くなります。
Char プロパティは、文字コレクションで実行できるほとんどの操作を実行できる 2 つの大きな利点があります。これは、親の範囲に制限されるのではなく親ストーリー内の任意の文字を参照できることと、範囲オブジェクトではなく LONGが関係しているため、大幅に高速です。 これらの利点により、テキスト オブジェクト モデル (TOM) は characters コレクションをサポートしていません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | tom.h |
[DLL] | Msftedit.dll |
関連項目
概念
リファレンス