Стили и шаблоны стилей в ТРВ-Редакторе (TRichView)

<< Нажмите, чтобы показать Содержание >>

Стили и шаблоны стилей в ТРВ-Редакторе (TRichView)

Как вы могли заметить, в этом руководстве элементы в TextStyles и ParaStyles иногда называются «стилями», а иногда просто «атрибутами текста/абзаца». Помимо исторических причин, существуют и другие причины для такого двойного именования, обусловленные различными сценариями использования.

Использование предопределённого набора стилей

В этом режиме у вас есть предопределённый набор элементов в TextStyles и ParaStyles, и он не изменяется во время работы приложения.

В этом режиме эти элементы могут называться «стилями».

hmtoggle_arrow1Пример

Вы можете настроить RichView1 таким образом, чтобы разрешить вставку файлов/потоков RVF и RTF без добавления новых стилей.

Однако этот вариант использования весьма ограничен. Обычно пользователи хотят применить новое форматирование к отдельным частям документа: изменить цвета, шрифты, выравнивание и т. д., поэтому невозможно создать все необходимые стили изначально.

Использование меняющегося набора стилей

В этом режиме вы можете создать некоторый начальный набор элементов в TextStyles и ParaStyles; однако большинство элементов добавляются в процессе работы приложения. Например, новые элементы могут добавляться при вставке файлов/потоков RVF или RTF, или при применении изменений к выделению (ApplyStyleConversion, ApplyParaStyleConversion). Инструменты интерфейса ТРВ (RichViewActions) также добавляют новые элементы.

В этом режиме элементы TextStyles и ParaStyles работают скорее как атрибуты текста/абзаца, а не как стили: большинство из них не имеют специального уникального имени или значения.

Некоторые элементы TextStyles и ParaStyles могут быть помечены как стандартные (Standard) (обычно это элементы, добавленные изначально). Они могут иметь особое значение, не удаляются методом DeleteUnusedStyles, могут быть сохранены в RTF как таблица стилей (если rvrtfSaveStyleSheet присутствует в RTFOptions). Однако это не является полным решением для стилей, поскольку все остальные элементы полностью от них независимы: если вы изменяете свойства стандартных стилей, изменяются только текст/абзацы, отформатированные с их помощью; все остальные части документа остаются без стиля. Это делает стандартные стили практически бесполезными, поэтому обычно приложению следует создавать только один стандартный стиль текста и один стандартный стиль абзаца (по умолчанию для новых документов).

Полным решением для реализации реальных стилей текста и абзацев являются «шаблоны стилей».

Шаблоны стилей (StyleTemplates) (+меняющийся набор стилей)

StyleTemplates – это тоже коллекция в компоненте TRVStyle. В отличие от TextStyles и ParaStyles, шаблоны стилей не определяют напрямую свойства текста и абзацев элементов документа. Вместо этого они предоставляют механизм для изменения TextStyles и ParaStyles.

Использование шаблонов стилей необязательно; они используются только в том случае, если TRichView.UseStyleTemplates=True.

Элементы документа не имеют прямых ссылок на шаблоны стилей, они по-прежнему связаны только с TextStyles и ParaStyles. Однако элементы в TextStyles и ParaStyles могут быть связаны с шаблонами стилей с помощью свойства StyleTemplateId.

Каждый элемент в документе может быть (косвенно) связан максимум с двумя шаблонами стилей:

через стиль абзаца или

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

Рекомендуется (но не обязательно) привязывать каждый стиль абзаца к какому-либо шаблону стиля. Рекомендуемое имя для шаблона стиля абзаца по умолчанию – «Normal».

Что касается стилей текста, рекомендуется связывать их с шаблонами стилей только в случае необходимости.

Существует 3 типа шаблонов стилей: применимые к тексту, применимые к абзацам, применимые к тексту и абзацам.

Каждый шаблон стиля может обладать свойствами как текста, так и абзаца. В отличие от элементов TextStyles или ParaStyles, шаблон стиля:

может определять только подмножество свойств текста и абзацев (перечисленное в ValidTextProperties и ValidParaProperties);

может наследовать свойства текста и абзацев от родительского шаблона стиля.

Когда какой-либо элемент документа (косвенно) связан как с шаблоном стиля абзаца, так и с шаблоном стиля текста, оба этих шаблона стиля связываются с его стилем текста: шаблон стиля текста как TextStyles[StyleNo].StyleTemplateId, шаблон стиля абзаца как TextStyles[StyleNo].ParaStyleTemplateId. TRichView автоматически обеспечивает для каждого элемента документа то, что значение TextStyles[StyleNo].ParaStyleTemplateId = ParaStyles[ParaNo].StyleTemplateId. В таких случаях шаблон стиля текста имеет приоритет в определении атрибутов текста: шаблон стиля абзаца определяет только атрибуты текста, не определенные шаблоном стиля текста.

Не все свойства элементов в TextStyles b ParaStyles определяются их шаблоном стиля: некоторые свойства можно изменять. Список изменённых свойств не сохраняется, он вычисляется по мере необходимости. Эти изменения могут (при желании) сохраняться при применении другого шаблона стиля к этим элементам, а также сохраняются при редактировании шаблонов стилей (StyleTemplates).

TRichViewEdit имеет следующие методы для применения указанного шаблона стиля к выделенному фрагменту: ApplyStyleTemplate, ApplyTextStyleTemplate, ApplyParaStyleTemplate. Те же методы можно использовать для очистки шаблона стиля или дополнительного форматирования.

Шаблоны стилей можно редактировать с помощью метода ChangeStyleTemplates.