Поделиться через


Метод ITextRange::Move (tom.h)

Перемещает точку вставки вперед или назад на указанное количество единиц. Если диапазон не является разроженным, диапазон сворачивается до точки вставки на обоих концах, в зависимости от количества, а затем перемещается.

Синтаксис

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

Параметры

Unit

Тип: long

Единица использования. Значение по умолчанию — tomCharacter. Сведения о других значениях см. в обсуждении в ITextRange.

Count

Тип: long

Число единицдля перемещения. Значение по умолчанию — 1. Если значение Count больше нуля, движение вперед —к концу истории, а если count меньше нуля, то движение назад — к началу. Если значение Count равно нулю, диапазон не изменяется.

pDelta

Тип: long*

Фактическое число единиц, за которые перемещается точка вставки. Указатель может иметь значение NULL. Дополнительные сведения см. в разделе «Примечания».

Возвращаемое значение

Тип: HRESULT

Метод возвращает значение HRESULT . Если методу удалось переместить точку вставки, он возвращает S_OK. Если метод завершается сбоем, он возвращает один из следующих кодов ошибок. Дополнительные сведения о кодах ошибок COM см. в разделе Обработка ошибок в COM.

Код возврата Описание
E_NOTIMPL
Единица измерения не поддерживается.
S_FALSE
Сбой по какой-то другой причине.

Комментарии

Если диапазон является вырожденным (точка вставки), этот метод пытается переместить точку вставки CountUnits.

Если диапазон не является разрородным, а значение Count больше нуля, этот метод сворачивает диапазон в позиции конечного символа, перемещает полученную точку вставки вперед на границу единицы измерения (если она еще не находится на единице), а затем пытается переместить Count - 1 Units вперед. Если диапазон не является разрозняемым и значение Count меньше нуля, этот метод сворачивает диапазон в начальной позиции символа, перемещает полученную точку вставки назад на границу единицы измерения (если она еще не находится на единице), а затем пытается переместить |Число| — 1 единицназад. Таким образом, в обоих случаях свертывание неразрожденного диапазона до точки вставки, независимо от того, двигается ли она к началу или концу единицы после свертывания, считается единицей.

Метод ITextRange::Move возвращает pDelta = количество фактически перемещенных единиц. Этот метод никогда не перемещает точку вставки за пределы этого диапазона. Если аргумент CountUnits перемещает точку вставки перед началом истории, она перемещается в начало истории и pDelta устанавливается соответствующим образом. Аналогичным образом, если countUnits перемещает его за пределы конца истории, он перемещается в конец истории.

Метод ITextRange::Move работает аналогично методам MoveLeft и MoveRight , ориентированным на пользовательский интерфейс, за исключением того, что направление движения является логическим, а не геометрическим. То есть при использовании ITextRange::Move направление находится либо к концу, либо к началу истории. В зависимости от языка, движение к концу истории может быть перемещение влево или вправо. Чтобы получить представление о счетчике, нажмите клавиши CTRL+СТРЕЛКА ВПРАВО в документе Microsoft Word для выбора различных вариантов. В тексте слева направо это нажатие клавиш выполняется так же, как Move(tomWord, 1)и MoveRight(tomWord, 1). Счетчик соответствует количеству нажатий клавиш CTRL+СТРЕЛКА ВПРАВО.

Например, если нажать клавиши CTRL+СТРЕЛКА ВПРАВО для выделения, показанного на обоих следующих рисунках, вы вернеесь к точке вставки в позиции символа 8, так как эта команда сворачивает выделенные фрагменты в их конечных позициях символов (7 и 8 соответственно) и перемещается к следующей границе tomWord .

Позиции символов для текстовой строки Позиции символов для текстовой строки Первый выделенный фрагмент не включает пустое пространство в позиции символа 7, поэтому CTRL+СТРЕЛКА ВПРАВО перемещается за пространство до границы tomWord в позиции символа 8. Позиция конечного символа уже находится на границе tomWord для второго выделения, поэтому CTRL+СТРЕЛКА ВПРАВО просто свернет выделение на этой границе. Аналогичным образом ctrl+стрелка влево, которая для этого текста действует как Move(tomWord, -1), и MoveLeft(tomWord, 1) сворачивает первое выделение в позиции символа 5, которая уже находится на границе tomWord , поэтому больше не происходит никакого движения. Но СОЧЕТАНИЕ КЛАВИШ CTRL+СТРЕЛКА ВЛЕВО сворачивает второе выделение в позиции символа 4, а затем перемещается к нулю, так как это следующая граница tomWord в направлении движения.

Возвращаемый аргумент pDelta задается равным числу единиц, в которых перемещается точка вставки, включая одну единицу для сворачивания неразрожденного диапазона и его перемещения на границу единицы измерения. Таким образом, если движение и сворачивание не происходят, как если диапазон является точкой вставки в конце истории, pDelta устанавливается равным нулю. Этот подход полезен для управления циклами программ, которые обрабатывают всю историю.

В обоих случаях, упомянутых выше, вызов Move(tomWord, 1) задает значение pDelta равным 1, так как диапазоны были свернуты. Аналогичным образом при вызове Move(tomWord, -1)значение pDelta равно -1 в обоих случаях. Сворачивание с перемещением части единицы на границу единицы или без нее считается перемещаемой единицей .

Направление движения относится к логическому упорядочению символов в резервном хранилище в виде обычного текста. Такой подход позволяет избежать проблем геометрического упорядочения, таких как слева и справа и вверх и вниз, в международном программном обеспечении. Такие геометрические методы по-прежнему необходимы в механизме редактирования, так как клавиатуры имеют клавиши со стрелками для их вызова. Если диапазон действительно является объектом ITextSelection , можно использовать такие методы, как MoveLeft и MoveRight .

Если в элементе Unit заданы символы (tomCharacter), в текстовой объектной модели (TOM) используется набор символов Юникода. Функции MultiByteToWideChar и WideCharToMultiByte предоставляют простые способы преобразования юникода и многобайтовых наборов символов при импорте и экспорте соответственно. Дополнительные сведения см. в разделе Open. В этой связи использование возврата каретки или канала строки (CR/LF) для разделения абзацев так же проблематично, как и двухбайтовая кодировка (DBCS). Методы пользовательского интерфейса ITextSelection создают резервную копию cr/LF, как если бы это был один символ, но методы ITextRange::Move считают CR/LFs двумя символами. Очевидно, что лучше использовать один символ в качестве разделителя абзаца, который в TOM представлен символом возврата символов, хотя символ разделителя абзаца в Юникоде, 0x2029, принимается. Как правило, подсистемы TOM должны поддерживать CR/LF, возврат каретки (CR), канал строки (LF), вертикальную вкладку, канал форм и 0x2029. Microsoft Rich Edit 2.0 также поддерживает CR/CR/LF для обратной совместимости.

См. также методы ITextRange::MoveStart и ITextRange::MoveEnd, которые перемещают единицыколичества позиций в диапазоне соответственно.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header tom.h
DLL Msftedit.dll

См. также раздел

Основные понятия

ITextRange

MoveEnd

MoveLeft

MoveRight

MoveStart

MultiByteToWideChar

Открыть

Другие ресурсы

Справочные материалы

Текстовая объектная модель

WideCharToMultiByte