Метод ITextRange::SetChar (tom.h)
Задает символ в начальной позиции диапазона.
Синтаксис
HRESULT SetChar(
long Char
);
Параметры
Char
Тип: long
Новое значение для символа в начальной позиции.
Возвращаемое значение
Тип: HRESULT
Метод возвращает значение HRESULT . Если метод завершается успешно, он возвращает S_OK. Если метод завершается ошибкой, он возвращает один из следующих кодов ошибок. Дополнительные сведения о кодах ошибок COM см. в разделе Обработка ошибок в COM.
Код возврата | Описание |
---|---|
|
Текст защищен от записи. |
|
Недостаточно памяти. |
Комментарии
ITextRange::SetChar позволяет указать точный код символа для использования. Однако строковые литералы с похожими глифами могут вводить в заблуждение.
Символы, заданные этим методом, имеют значение LONG , а не BSTR. При этом скрывается способ их хранения в резервном хранилище (в виде байтов, слов, переменной длины и т. д.).
Часто в системах, не имеющих автоматической обтекания словами, документы имеют жесткие возвраты каретки, вставляемые только для разрывов строк. В следующем коде показан простой, но не идеальный способ преобразования таких возвратов жесткой каретки обратно в пробелы для истории, связанной с диапазоном 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
Такой подход позволяет переносить текст на другие ширины. Однако алгоритм несовершенен: предполагается, что возврат жесткой каретки, за которой следует не пробел (пустой, табуляции, перевода строки, возврата каретки и т. д.), должен быть заменен пустым. Алгоритм также предполагает, что символ возврата каретки является одним символом, например символом возврата каретки или символом конца абзаца Юникода (EOP) 0x2029. Кроме того, сочетание возврата каретки и перевода строки не совпадает и потребует написания и выполнения дополнительного кода (или использования FindText(^p)
). Еще одним предостережением является то, что существуют и другие случаи, например смешанный код и документация, в которых алгоритм работает неправильно.
Однако ITextRange::SetChar является более эффективным, чем операция замены, которая выполняется путем удаления с последующей вставкой. Таким образом, перезапись кода без использования ITextRange::SetChar , вероятно, будет выполняться гораздо медленнее.
Свойство Char , которое может выполнять большинство действий, которые может выполнять коллекция символов, имеет два больших преимущества: оно может ссылаться на любой символ в родительской истории, а не ограничиваться родительским диапазоном, и это значительно быстрее, так как используются объекты LONG, а не range. Из-за этих преимуществ модель текстовых объектов (TOM) не поддерживает коллекцию символов.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | tom.h |
DLL | Msftedit.dll |
См. также раздел
Основные понятия
Справочные материалы