|
<< Нажмите, чтобы показать Содержание >> Создание документа в ТРВ-Редакторе (TRichView) |
Документ можно создать следующей последовательностью действий:
1.очистить TRichView,
2.добавить элементы в документ,
3.переформатировать и перерисовать TRichView.
Таким образом, общая структура процедуры генерации документов выглядит следующим образом:
MyRichView.Clear;
<Методы добавления содержимого>
MyRichView.Format;
Примечание: все методы, определённые в TRichView (за исключением собственно методов форматирования), не переформатируют документ, не перерисовывают TRichView и не вызывают событие OnChange (TRichView не имеет события OnChange, оно введено в TRichViewEdit) (
методы быстрого изменения документа).
Группа методов для добавления элементов в конец документа является самой большой группой методов (и содержит большое количество методов для обратной совместимости).
Важно: Не передавайте строки с символами cr, lf или cr+lf, табуляцией и разрывом страницы в приведённые ниже методы, за исключением методов AddText***!
Некоторые текстовые элементы могут быть гипертекстом. Гипертекстовые элементы добавляются теми же методами, что и обычные текстовые элементы.
Эти методы добавляют текст, указанный в строковом параметре. Этот параметр имеет формат:
▪Юникода (UTF-16) для Delphi/C++Builder 2009 и новее,
▪ANSI для более старых версий Delphi/C++Builder,
▪Юникода (UTF-8) для Lazarus.
Поскольку TRichView хранит текст в формате Unicode (UTF-16), при использовании ANSI-строк методы выполняют преобразование в Юникод.
▪AddNL(S, StyleNo, ParaNo, Tag) – добавляет один текстовый элемент S; StyleNo – номер в коллекции стилей текста (TRichView.Style.TextStyles); ParaNo – номер в коллекции стилей абзацев (RichView.Style.ParaStyles) (если этот элемент начинает абзац) или -1 (если он продолжает абзац). При необходимости можно указать Tag.
▪Add(S, StyleNo) – эквивалентен AddNL(S, StyleNo, -1).
▪AddTextNL(s, StyleNo, FirstParaNo, OtherParaNo, Tag) – добавляет один или несколько текстовых элементов; первый элемент добавляется со стилем абзаца FirstParaNo, последующие со стилем абзаца OtherParaNo; элементы разделены в исходной строке s символами cr, lf or cr+lf ; s может содержать символы табуляции и разрыва страницы. При необходимости можно указать Tag.
▪AddFmt(FormatStr, Args, StyleNo, ParaNo) добавляет строку Format(FormatStr, Args), где Format – это функция из модуля SysUtils.
▪AddNLA, AddNLW, AddTextNLA, AddTextNLW
Вы можете добавить изображение любого класса, поддерживаемого Delphi – TBitmap, TIcon, TMetafile, TJpegImage или или классы других разработчиков.
Вам следует создать изображение, и TRichView сам удалит его при необходимости (например, при вызове RichView.Clear).
В FireMonkey вместо непосредственного использования графического класса, используется класс-обёртка, который позволяет работать с изображениями FireMonkey (TBitmap, TSkSvgBrush) так же, как с изображениями в VCL, см. TRVGraphic.
AddPicture(Name, gr, ParaNo, VAlign, Tag), где:
▪Name: TRVUnicodeString – название рисунка; эта строка никак не используется TRichView; строка не должна содержать символов cr и lf;
▪gr: TRVGraphic - изображение;
▪ParaNo:Integer – номер в коллекции стилей абзацев (TRichView.Style.ParaStyles) (если этот рисунок начинает абзац) или -1 (если он продолжает абзац);
▪VAlign: TRVVAlign – вертикальное выравнивание рисунка;
▪при необходимости можно указать Tag.
В TRichView можно добавить любой визуальный компонент Delphi, и он будет работать как обычно. Вам нужно создать компонент, и TRichView сам уничтожит его при необходимости (например, при вызове метода RichView.Clear).
AddControl(Name, ctrl,ParaNo, VAlign, Tag) добавляет компонент, так же как AddPicture добавляет рисунок.
VCL и Lazarus: TRichView использует свойство Tag вставленного компонента для своих нужд (не путайте с тегами элементов документа TRichView).
AddBullet (Name, ImageIndex, ImageList, ParaNo, VAlign, Tag), где:
▪Name: TRVUnicodeString – название значка; эта строка никак не используется TRichView; строка не должна содержать символов cr и lf;
▪ImageIndex: Integer – номер изображения в TImageList;
▪ImageList: TCustomImageList – компонент со списком изображений; это просто указатель на компонент; TRichView не хранит у себя копии этого компонента и не освобождает память под него;
▪ParaNo:Integer – номер в коллекции стилей абзацев (TRichView.Style.ParaStyles) (если этот значок начинает абзац) или -1 (если он продолжает абзац);
▪VAlign: TRVVAlign – вертикальное выравнивание значка;
▪при необходимости можно указать Tag.
Интерактивные значки похожи на обычные значки, но могут иметь два изображения («обычное» и «активное») и могут быть использованы как гиперссылки.
AddHotspot(Name, ImageIndex, HotImageIndex, ImageList, ParaNo, VAlign, Tag) похож на AddBullet. Он имеет один дополнительный параметр (HotImageIndex), задающий изображение, показываемое под указателем мыши.
Маркеры списка можно добавить с помощью метода SetListMarkerInfo. В отличие от описанных выше методов, этот метод позволяет вставлять маркеры списка не только в конец документа, но и устанавливать их для существующих абзацев.
Таблицы, текстовые метки, номера, концевые сноски, сноски, ссылки на сноски, номера страниц, числа страниц, математические выражения, нестандратные типы элементов не имеют специальных методов добавления в документа. Все они добавляются методом AddItem.
Закладки не являются элементами TRichView, но метод добавления закладки аналогичен методам добавления элементов: AddCheckpoint. См. раздел справки о закладках.
Разрыв страницы – это свойство элемента документа (флажок «этот элемент начинает новую страницу»). Только элементы, начинающие новый абзац, могут начинать новую страницу.
Пример:
var ItemNo: Integer;
MyRichView.AddNL('Первая страница', 0, 0);
ItemNo := MyRichView.ItemCount;
MyRichView.AddNL('Вторая страница', 0, 0);
MyRichView.PageBreaksBeforeItems[ItemNo] := True;
Добавить данные RVF можно следующими способами:
▪function InsertRVFFromStream(Stream: TStream; Index: Integer):Boolean;
Этот метод позволяет вставлять документ RVF. Первый элемент RVF будет иметь указанный номер. Например, если вы хотите добавить содержимое RVF в конец, напишите:
MyRichView.InsertRVFFromStream(MyStream, MyRichView.ItemCount);
InsertRVFFromStream – единственный метод TRichView (не TRichViewEdit), позволяющий вставлять произвольные элементы.
▪function AppendRVFFromStream(Stream: TStream; ParaNo: Integer):Boolean;
Этот метод аналогичен InsertRVFFromStream (если он используется для добавления RVF в конец документа), но он игнорирует стиль абзаца первого элемента в RVF и использует параметр ParaNo вместо него. ParaNo – это номер в коллекции стилей абзацев (RichView.Style.ParaStyles) (если элемент будет начинать абзац) или -1 (если элемент будет продолжать абзац).
▪procedure AppendFrom(Source: TCustomRichView);
Это наиболее эффективный способ копирования содержимого одного RichView в другой. Однако элементы некоторых типов (включая вставленные компоненты и таблицы) этим методом не копируются (просто игнорируются), поэтому копирование через RVF предпочтительнее.
Методы для загрузки файлов и потоков (Load***) также принадлежат к этой группе методов.
В версии 1.2 произошло важное изменение: теперь можно добавлять элементы с новой строки, не начиная новый абзац. Новых методов для генерации документов нет (они добавлены в версии 1.3: AddTextNLW), но есть метод, влияющий на их поведение: TRichView.SetAddParagraphMode.