Обзор RichView Format (RVF)

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

Обзор RichView Format (RVF)

Что такое RVF?

RVF (RichView Format) – это формат файлов, специально разработанный для сохранения/загрузки документов TРВ-Редактора (RichView). Это довольно простой и компактный формат. Он может быть текстовым или бинарным (определяется свойством TRichView.RVFOptions).

Этот формат используется:

в TDBRichView, TDBRichViewEdit, чтобы хранить документы в бинарных полях базы данных;

RVF может быть скопирован в буфер обмена; редактор может вставлять RVF;

данные могут быть перетащены мышью в формате RVF;

копирование документа из одного компонента в другой удобно реализовывать через сохранение и чтение RVF (см. также свойство Document)

можно загружать и сохранять RVF методами: LoadRVFFromStream, InsertRVFFromStream, AppendRVFFromStream, LoadRVF, SaveRVFToStream, SaveRVF.

Все свойства документа TRichVew можно сохранить в формате RVF. Дополнительно можно сохранить наборы стилей текста, абзацев, списков, шаблонов стилей, полей и фона (см. ниже).

Главное, что нужно знать об RVF

Основные настройки, влияющие на сохранение и загрузку RVF-файлов, можно изменить в редакторе компонента TRichView во время проектирования (designtime);

для загрузки из RVF значков, интерактивных значков и маркеров списка с изображениями из TImageList необходимо обработать событие OnRVFImageListNeeded;

вы можете сохранять рисунки и вставленные компоненты в бинарном или текстовом режиме (бинарный режим гораздо эффективнее и компактнее);

вы можете сохранять изображения и вставленные компоненты непосредственно в RVF или создавать их по запросу при загрузке;

если вы загружаете вставленные компоненты из RVF, необходимо зарегистрировать их классы с помощью процедуры RegisterClasses (например: RegisterClasses([TButton]));

то же самое для рисунков; однако, если класс изображения не зарегистрирован, TRichView попытается найти подходящий графический класс на основе содержимого;

форматирование текста и абзацев (т.е. стили) сохраняется в RVF-документах опционально, если rvfoSaveTextStyles и rvfoSaveParaStyles включены в RVFOptions;

шаблоны стилей сохраняются в RVF, если в RVFOptions указаны опции rvfoSaveTextStyles и rvfoSaveParaStyles, а также UseStyleTemplates=True.

RVF и списки изображений в компонентах TImageList

TRichView может самостоятельно сохранять и загружать всё содержимое документа, но есть исключение: значки, интерактивные значки и маркеры списка, использующие изображения из TImageList.

При загрузке ТРВ-Редактору необходимо знать, какой компонент TImageList использовать для данного элемента документа. Он запрашивает эту информацию у приложения, вызывая событие OnRVFImageListNeeded. Вам необходимо обработать это событие, если вы хотите загружать документы с вышеперечисленными элементами.

При сохранении TRichView записывает значение свойства Tag компонента TImageList вместе с другими данными вышеперечисленных элементов документа. При чтении TRichView вызывает событие OnRVFImageListNeeded и передаёт ему это значение.

Пример

Пусть у нас есть два компонента TImageLists (ImageList1 и ImageList2), которые используются в значках документа, который нужно загрузить в MyRichView. Вам нужно:

установить ImageList1.Tag в 1, а ImageList2.Tag в 2,

обработать событие MyRichView.OnImageListNeeded:

procedure TMyForm.MyRichViewRVFImageListNeeded(

  Sender: TCustomRichView; ImageListTag: Integer; 

  var il: TCustomImageList);

begin

  case ImageListTag of

    1:

      il := ImageList1;

    2:

      il := ImageList2;

  end;

end;

Не путайте ImageList.Tag с тегами элементов документа. В этом случае используется свойство ImageList.Tag.

TRichView не является владельцем компонентов TImageList, он никогда их не уничтожает. Он просто хранит ссылки на них.

RVF и рисунки / компоненты

В RVF можно сохранять полную информацию об изображениях и вставленных компонентах, но также можно использовать другую возможность: сохранять изображения/элементы управления самостоятельно и включать в RVF только некоторые «идентификаторы», которые можно использовать для создания изображений/компонентов при необходимости (при загрузке). В качестве этих «идентификаторов» можно использовать два значения: теги и названия элементов документа.

При загрузке, используйте события OnRVFPictureNeeded и OnRVFControlNeeded.

hmtoggle_arrow1Пример

Как можно видеть, TRichView передаёт два параметра, по которым можно идентифицировать загружаемый компонент:

Tag: TRVTag – тег элемента документа (не следует путать с со свойством Tag компонентов, унаследованных от TComponent);

Name: TRVUnicodeString – название элемента документа (строковое свойство, имеющееся у каждого нетекстового элемента документа).

hmtoggle_arrow1Пример

Как вы видите, это событие даёт дополнительные возможности для идентификации изображения. Помимо названия (ItemName) и тега (Item.Tag) элемента документа, можно использовать другие свойства. В частности, данный пример использует свойства, специально предназначенные для хранения имени файла.

 

Изображения могут храниться непосредственно в RVF-файле. RVF содержит имена графических классов, используемых для этих изображений. Если вы хотите использовать те же графические классы для загруженных изображений, вам необходимо зарегистрировать эти классы с помощью процедуры RegisterClasses. VCL-версия ТРВ-Редактора сама регистрирует классы TBitmap, TMetafile, TIcon, TJPEGImage, TWicImage (для Delphi 2010+), TPngImage (для Delphi 2009+). Если вы включите модуль RVGifAnimate2007 в свой проект, TGifImage также будет зарегистрирован (для Delphi 2007+). Все остальные графические классы должны быть зарегистрированы явно. Если указанный в RVF графический класс недоступен при чтении, TRichView попытается определить подходящий класс по содержимому графики.

Если вы включите опцию rvfoIgnoreGraphicClasses в RichView.RVFOptions, RichView будет игнорировать имена графических классов, хранящихся в RVF, и всегда будет пытаться найти подходящий графический класс по содержимому графики.

Опции для сохранения и загрузки. Предупреждения.

Свойство TRichView.RVFOptions содержит опции для сохранения и загрузки RVF-файлов.

После загрузки вы можете проверить свойство TRichView.RVFWarnings. В зависимости от опций в TRichView.RVFOptions, некоторые значения в RichView.RVFWarnings могут рассматриваться либо как ошибки (из-за которых чтение было прервано), либо как предупреждения (о возможных проблемах при чтении документа).

Единицы измерения

Файл RVF может быть записан с использованием единиц измерения (пикселей, твипов или EMU), отличными от Style.Units компонента TRichView, загружающего этот файл.

При загрузке файла RVF компонент работает в соответствии с опцией rvfoCanChangeUnits:

Если она исключена из RVFOptions, размеры из RVF преобразуются в Style.Units.

Если она включена, то наоборот, размеры из RVF читаются без преобразования, а существующие стили преобразовываются в единицы измерения, считанные из RVF (с использованием метода Style.ConvertToDifferentUnits)

Если при чтении RVF выполняется преобразование единиц измерения, rvfwConvUnits включается в RVFWarnings.

См. также...

Спецификация RVF

Свойства TRichView:

Options,

RVFOptions,

RVFWarnings;

UseStyleTemplates;

StyleTemplateInsertMode.

События TRichView:

OnRVFImageListNeeded,

OnVFControlNeeded,

OnRVFPictureNeeded,

OnControlAction (ControlAction=rvcaAfterRVFLoad),

OnItemAction (ItemAction=rviaInserting and rviaInserted);

OnStyleTemplatesChange.

Методы TRichView:

LoadRVFFromStream, InsertRVFFromStream, AppendRVFFromStream, LoadRVF,

SaveRVFToStream, SaveRVF,

Copy, CopyDef, CopyRVF.

Методы TRichViewEdit :

InsertRVFFromStreamEd, InsertRVFFromFileEd,

Paste, PasteRVF, CanPasteRVF, CutDef.