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


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

Задает символ в начальной позиции диапазона.

Синтаксис

HRESULT SetChar(
  long Char
);

Параметры

Char

Тип: long

Новое значение для символа в начальной позиции.

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

Тип: HRESULT

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

Код возврата Описание
E_ACCESSDENIED
Текст защищен от записи.
E_OUTOFMEMORY
Недостаточно памяти.

Комментарии

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

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

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

ITextRange

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

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