Метод 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.
Код возврата | Описание |
---|---|
|
Единица измерения не поддерживается. |
|
Сбой по какой-то другой причине. |
Комментарии
Если диапазон является вырожденным (точка вставки), этот метод пытается переместить точку вставки 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 |
См. также раздел
Основные понятия
Другие ресурсы
Справочные материалы