|
<< Нажмите, чтобы показать Содержание >> Стили и шаблоны стилей в ТРВ-Редакторе (TRichView) |
Как вы могли заметить, в этом руководстве элементы в TextStyles и ParaStyles иногда называются «стилями», а иногда просто «атрибутами текста/абзаца». Помимо исторических причин, существуют и другие причины для такого двойного именования, обусловленные различными сценариями использования.
В этом режиме у вас есть предопределённый набор элементов в TextStyles и ParaStyles, и он не изменяется во время работы приложения.
В этом режиме эти элементы могут называться «стилями».
В этом примере RichView1: TRichView связан с RVStyle1: TRVStyle. RVStyle1.TextStyles.Clear; with RVStyle1.TextStyles.Add do begin StyleName := 'Normal Text'; end; with RVStyle1.TextStyles.Add do begin StyleName := 'Title Text'; Size := 14; Style := [fsBold]; end; RVStyle1.ParaStyles.Clear; with RVStyle1.ParaStyle.Add do begin StyleName := 'Normal Paragraph'; end; with RVStyle1.ParaStyle.Add do begin StyleName := 'Title Paragraph'; Alignment := rvaCenter; Options := [rvpaoKeepWithNext]; end; ... RichView1.Clear; RichView1.AddNL(Глава 1', 1, 1); RichView1.AddNL('В некотором царстве...', 1, 1); RichView1.Format; Вы можете изменять свойства стилей, чтобы изменить внешний вид создаваемого документа, не пересоздавая сам документ: with RVStyle1.TextStyles[1] do begin Color := clRed; FontName := 'Verdana'; end; with RVStyle1.ParaStyles[1] do begin Alignment := rvaLeft; end; RichView1.Reformat; |
Вы можете настроить RichView1 таким образом, чтобы разрешить вставку файлов/потоков RVF и RTF без добавления новых стилей.
Однако этот вариант использования весьма ограничен. Обычно пользователи хотят применить новое форматирование к отдельным частям документа: изменить цвета, шрифты, выравнивание и т. д., поэтому невозможно создать все необходимые стили изначально.
В этом режиме вы можете создать некоторый начальный набор элементов в TextStyles и ParaStyles; однако большинство элементов добавляются в процессе работы приложения. Например, новые элементы могут добавляться при вставке файлов/потоков RVF или RTF, или при применении изменений к выделению (ApplyStyleConversion, ApplyParaStyleConversion). Инструменты интерфейса ТРВ (RichViewActions) также добавляют новые элементы.
В этом режиме элементы TextStyles и ParaStyles работают скорее как атрибуты текста/абзаца, а не как стили: большинство из них не имеют специального уникального имени или значения.
Некоторые элементы TextStyles и ParaStyles могут быть помечены как стандартные (Standard) (обычно это элементы, добавленные изначально). Они могут иметь особое значение, не удаляются методом DeleteUnusedStyles, могут быть сохранены в RTF как таблица стилей (если rvrtfSaveStyleSheet присутствует в RTFOptions). Однако это не является полным решением для стилей, поскольку все остальные элементы полностью от них независимы: если вы изменяете свойства стандартных стилей, изменяются только текст/абзацы, отформатированные с их помощью; все остальные части документа остаются без стиля. Это делает стандартные стили практически бесполезными, поэтому обычно приложению следует создавать только один стандартный стиль текста и один стандартный стиль абзаца (по умолчанию для новых документов).
Полным решением для реализации реальных стилей текста и абзацев являются «шаблоны стилей».
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.