Share via


ITextRange::Move メソッド (tom.h)

挿入ポイントを、指定した単位数だけ前後に移動します。 範囲が生成されていない場合、 範囲は Count に応じていずれかの末尾の挿入ポイントに折りたたまれてから移動されます。

構文

HRESULT Move(
  long Unit,
  long Count,
  long *pDelta
);

パラメーター

Unit

型: long

使用する単位。 既定値は tomCharacter です。 その他の値については、「 ITextRange」の説明を参照してください。

Count

型: long

過去に移動する 単位の数。 既定値は 1 です。 Count が 0 より大きい場合、モーションはストーリーの末尾に向かって前方に移動し、Count が 0 未満の場合は、モーションは先頭に向かって後方になります。 Count が 0 の場合、範囲は変更されません。

pDelta

種類: long*

挿入ポイントが過去に移動する 単位の実際の数。 ポインターは NULL にすることができます。 詳細については、「解説」を参照してください。

戻り値

種類: HRESULT

メソッドは HRESULT 値を返します。 メソッドがカーソルの移動に成功すると、 S_OKが返されます。 メソッドが失敗した場合は、次のいずれかのエラー コードが返されます。 COM エラー コードの詳細については、「COM でのエラー処理」を参照してください。

リターン コード 説明
E_NOTIMPL
ユニット はサポートされていません。
S_FALSE
何らかの理由で失敗しました。

注釈

範囲が縮退 (挿入ポイント) の場合、このメソッドは、挿入ポイント CountUnits の移動を試みます。

範囲が生成されず、 Count が 0 より大きい場合、このメソッドは末尾の文字位置の範囲を折りたたみ、結果の挿入ポイントを Unit 境界に進み (まだ 1 つでない場合)、 Count - 1 Units の前方への移動を試みます。 範囲が低く 、Count が 0 未満の場合、このメソッドは開始文字位置の範囲を折りたたみ、結果の挿入ポイントを Unit 境界に後方に移動して (まだ 1 つでない場合)、移動を試みます。 |Count|- 1 ユニット後方。 したがって、どちらの場合も、非生成範囲を挿入ポイントに折りたたみ、折りたたみ後に Unit の開始または終了に移動するかは、 Unit としてカウントされます。

ITextRange::Move メソッドは pDelta = 実際に移動した単位の数を返します。 このメソッドは、この範囲のストーリーを超えて挿入ポイントを移動することはありません。 CountUnits がストーリーの先頭の前に挿入ポイントを移動する場合は、ストーリーの先頭に移動され、それに応じて pDelta が設定されます。 同様に、 カウントユニットのがストーリーの末尾を越えて移動すると、ストーリーの末尾に移動します。

ITextRange::Move メソッドは、モーションの方向が幾何学的ではなく論理的であることを除き、UI 指向の MoveLeft メソッドや MoveRight メソッドと同様に機能します。 つまり、 ITextRange::Move の場合、方向は末尾に向かって、またはストーリーの先頭に向かって移動します。 言語によっては、ストーリーの末尾に向かって移動する場合は、左または右に移動する可能性があります。 Count の操作性を得るには、Microsoft Word ドキュメントで Ctrl キーを押しながら右方向キーを押して、さまざまな選択を行います。 左から右のテキストでは、このキーストロークは、、および とMove(tomWord, 1)MoveRight(tomWord, 1)同じように動作します。 Count は、Ctrl キーを押しながら右方向キーを押す回数に対応します。

たとえば、次の図の両方に示す選択範囲に対して Ctrl キーを押しながら右方向キーを押すと、文字位置 8 の挿入ポイントが表示されます。これは、このコマンドによって、選択範囲が終了文字位置 (それぞれ 7 と 8) で折りたたまれ、次の tomWord 境界に移動するためです。

文字列文字列の文字位置テキスト文字列の文字位置 最初の選択範囲には文字位置 7 の空白文字が含まれていないため、Ctrl + 右方向キーを押すと、スペースが文字位置 8 の tomWord 境界に移動します。 終了文字の位置は、2 番目の選択範囲の tomWord 境界に既に存在するため、Ctrl キーを押しながら右方向キーを押すだけで、その境界で選択範囲が折りたたまれます。 同様に、Ctrl + 左方向キーを押します。このテキストは のように Move(tomWord, -1)機能し MoveLeft(tomWord, 1) 、既 に tomWord 境界にある文字位置 5 で最初の選択範囲を折りたたむため、これ以上モーションは発生しません。 ただし、Ctrl キーを押しながら左方向キーを押すと、2 番目の選択範囲が文字位置 4 で折りたたまれ、0 に移動します。これは、移動方向の次の tomWord 境界であるためです。

戻り値の引数 pDelta は、非生成範囲を折りたたんで Unit境界に移動するための 1 つの Unit を含む、挿入ポイントが移動される Unit s の数に等しく設定されます。 したがって、ストーリーの最後に範囲が挿入ポイントである場合のように、モーションと折りたたみが発生しない場合、 pDelta は 0 に設定されます。 このアプローチは、ストーリー全体を処理するプログラム ループを制御する場合に役立ちます。

上記のどちらの場合も、範囲が折りたたまれていたため、 を呼び出すと Move(tomWord, 1)pDelta が 1 に設定されます。 同様に、 を呼び出すと Move(tomWord, -1) 、両方のケースで pDelta が -1 に設定されます。 単位の一部を単位境界に移動する場合と、移動しない場合の折りたたみは、単位の移動としてカウントされます。

モーションの方向は、プレーンテキスト バッキング ストアでの論理文字の順序を指します。 このアプローチにより、国際的なソフトウェアでは、左と右、上、下などの幾何学的順序付けの問題を回避できます。 このような幾何学的メソッドは、もちろん、キーボードにはそれらを呼び出すための矢印キーがあるため、編集エンジンでは引き続き必要です。 範囲が実際に ITextSelection オブジェクトである場合は、 MoveLeftMoveRight などのメソッドを使用できます。

Unit で文字 (tomCharacter) が指定されている場合、テキスト オブジェクト モデル (TOM) は Unicode 文字セットを使用します。 Unicode 文字セットとマルチバイト文字セット間で変換するには、 MultiByteToWideChar 関数と WideCharToMultiByte 関数を使用すると、インポート時とエクスポート時に Unicode 文字セットとマルチバイト文字セットを簡単に変換できます。 詳細については、「 開く」を参照してください。 この接続では、復帰/改行 (CR/LF) を使用して段落を分離することは、2 バイト文字セット (DBCS) と同じくらい問題になります。 ITextSelection UI メソッドは CR/LF を 1 文字のようにバックアップしますが、ITextRange::Move メソッドは CR/LF を 2 文字としてカウントします。 1 文字を段落区切り記号として使用する方が明らかです。TOM では文字の戻り値で表されますが、Unicode 段落区切り文字0x2029は受け入れられます。 一般に、TOM エンジンは CR/LF、復帰 (CR)、改行 (LF)、垂直タブ、フォーム フィード、および0x2029をサポートする必要があります。 Microsoft Rich Edit 2.0 では、下位互換性のために CR/CR/LF もサポートされています。

また、 ITextRange::MoveStart メソッドと ITextRange::MoveEnd メソッドも参照してください。このメソッドは、それぞれ Start または End position CountUnits の範囲を移動します。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー tom.h
[DLL] Msftedit.dll

関連項目

概念

ITextRange

Moveend

MoveLeft

MoveRight

MoveStart

MultiByteToWideChar

[ファイル]

その他のリソース

リファレンス

Text オブジェクト モデル

WideCharToMultiByte