Как использовать нестандартные графические классы в ТРВ-Редакторе [VCL и LCL]

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

Как использовать нестандартные графические классы в ТРВ-Редакторе [VCL и LCL]

О FireMonkey

Вся приведённая ниже информация относится к VCL и LCL.

В FireMonkey графические классы наследуются от TRVGraphicFM.

Использование сторонних графических классов

Можно использовать графические классы, созданные сторонними разработчиками.

Эти классы можно использовать так же, как стандартные классы (TBitmap, TIcon, TMetafile, TJpegImage).

Изображение можно добавить в документ с помощью AddPictureEx или InsertPicture.

Пример:

gif: TGifImage;

...

gif := TGifImage.Create;

gif.LoadFromFile('demo.gif');

editor.InsertPicture('Demo', gif, rvvaBaseLine);

Например, можно использовать следующие бесплатные графические классы:

TGifImage Андерса Меландера (Anders Melander) (www.trichview.ru/resources/thirdparty/gifimage.zip) (полезно для Delphi 2006 и более старых версий)

TJvGifImage из JEDI JVCL https://wiki.delphi-jedi.org/ (полезно для Delphi 2006 и более старых версий;)

TPngObject Густаво Хуффенбахера Дауда (Gustavo Huffenbacher Daud) www.trichview.ru/resources/thirdparty/pngimage.zip (полезно для Delphi 2007 и более старых версий)

Начиная с Delphi 2007, расширенная версия TGifImage Андерса Меландера входит в VCL, поэтому TGifImage становится стандартным графическим классом.

Начиная с Delphi 2009, TPngImage входит в VCL.

GIF-анимация

Для поддержки анимации задайте TCustomRichView.AnimationMode = rvaniOnFormat.

В проект должны быть включены следующие модули:

RVGifAnimate – для TGifImage Андерса Меландера;

RVJvGifAnimate – для TJvGifImage из JEDI JVCL;

RVGifAnimate2007 – для стандартного Delphi-класса TGifImage в Delphi 2007 и новее.

Управление автоматической вставкой графики при импорте RTF, DocX, HTML и Markdown

Загрузка внешних файлов изображений

Иногда изображения вставляются автоматически, например при импорте изображений, на которые ссылаются RTF-, DocX-, Markdown- или HTML-документы.

Вопрос: какие графические классы ТРВ-Редактор использует для загрузки графических форматов, таких как GIF или PNG?

Ответ: Он использует графический класс, зарегистрированный для данного формата файла.

Сначала ТРВ-Редактор пытается определить формат изображения по содержимому файла и выбрать подходящий графический класс для этого формата.

Если определить формат по содержимому не удалось, используются сопоставления между расширениями файлов и графическими классами.

Если разработчик стороннего класса не связал свой графический класс с расширением файла, это можно сделать самостоятельно с помощью TPicture.RegisterFileFormat:

TPicture.RegisterFileFormat('gif','Gif Image', TGifImage);

Загрузка изображений, встроенных в RTF, DocX или HTML

При импорте изображений, содержащихся внутри RTF или DocX, ТРВ-Редактор использует графические классы, заданные как классы по умолчанию для соответствующих графических форматов. См. TRVGraphicHandler.SetDefaultGraphicClass.

При импорте изображений, содержащихся внутри HTML в кодировке Base64, ТРВ-Редактор определяет графический формат по содержимому.

Обход ошибки Delphi в конструкторах графических классов (Delphi 5)

Если вы используете Delphi 5, вместо прямого вызова конструктора графического класса используйте RVGraphicHandler.CreateGraphic.

Для Delphi 6/C++Builder 6 и более новых версий это не требуется.

Экспорт графики в HTML

По умолчанию все изображения в форматах, не предназначенных для веб, преобразуются в JPEG. Для некоторых форматов это может быть нежелательно.

Можно указать, какие графические классы не должны преобразовываться.

Используйте процедуру RVGraphicHandler.RegisterHTMLGraphicFormat, например:

uses RVGrHandler;

...

// вызовите перед первым экспортом в HTML

RVGraphicHandler.RegisterHTMLGraphicFormat(TMyGifImage);

Эта регистрация влияет только на изображения указанного формата. Изображения остальных форматов будут преобразовываться в JPEG.

ТРВ-Редактор автоматически регистрирует следующие классы как HTML-графические форматы:

стандартный TPngImage – для Delphi 2009 и новее;

стандартный TGifImage – для Delphi 2007 и новее, если в проект включён модуль RVGifAnimate2007;

TGifImage Андерса Меландера – если в проект включён модуль RVGifAnimate;

TJvGifImage из JEDI JVCL – если в проект включён модуль RVJvGifAnimate;

TPortableNetworkGraphic – для Lazarus.

Задание класса PNG

Задайте графический класс для PNG-изображений с помощью RVGraphicHandler.RegisterPngGraphic, например:

uses RVFuncs;

...

RVGraphicHandler.RegisterPngGraphic(TPngObject). 

Это позволяет загружать PNG-изображения из RTF-файлов и сохранять PNG-изображения в RTF- и DocX-файлы без преобразования в изображения bitmap или метафайлы.

В Delphi 2009 и новее ТРВ-Редактор автоматически регистрирует стандартный TPngImage как класс PNG.

Задание класса JPEG

Задайте графический класс для JPEG-изображений с помощью RVGraphicHandler.RegisterJpegGraphic, например:

uses RVFuncs;

...

RVGraphicHandler.RegisterJpegGraphic(TMyJpegImage). 

Если этот метод не вызывается, ТРВ-Редактор использует TJPEGImage.

Этот класс используется при загрузке JPEG-изображений, встроенных в RTF.

Использование графических классов DevExpress

Если раскомментировать RVUSEDXPNGIMAGE в RV_Defs.inc, ТРВ-Редактор поддерживает следующие классы DevExpress:

TcxPngImage – для PNG;

TdxSmartImage – для Bitmap, JPEG, TIFF, GIF и SVG.

TcxPngImage становится классом PNG по умолчанию для ТРВ-Редактора, но TdxSmartImage не становится классом JPEG по умолчанию, если явно не вызвать RVGraphicHandler.RegisterJpegGraphic.