TRVGraphicHandler

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

TRVGraphicHandler

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

Модуль [VCL/FMX]: RVGrHandler / fmxRVGrHandler

Синтаксис

TRVGraphicHandler = class;

Использование

В приложении создаётся единственный объект этого класса. Он возвращается функцией RVGraphicHandler.

Если нужно изменить поведение этого класса, создайте класс, унаследованный от TRVGraphicHandler, и присвойте его глобальной переменной RVGraphicHandlerVar.

Методы

Полное описание всех методов этого класса выходит за рамки этой справки.

Полезными являются следующие методы:

procedure SetDefaultGraphicClass(GraphicType: TRVGraphicType

  GraphicClass: TRVGraphicClass);
procedure RegisterPngGraphic(GraphicClass: TRVGraphicClass);
procedure RegisterJpegGraphic(GraphicClass: TRVGraphicClass);
procedure RegisterHTMLGraphicFormat(GraphicClass: TRVGraphicClass);

function CreateGraphicByType(GraphicType: TRVGraphicType): TRVGraphic;
function LoadFromFile(const FileName: TRVUnicodeString): TRVGraphic
function LoadFromStream(Stream: TStream): TRVGraphic;

function GetDataGraphicType(const Buffer; Size: Integer): TRVGraphicType;

 

// VCL и LCL
function CreateGraphic(GraphicClass: TRVGraphicClass): TRVGraphic

// FireMonkey
function GetFileDialogFilter: String;

[FireMonkey] Обычно для получения строки фильтра файлового диалога при открытии изображений разработчики используют TBitmapCodecManager.GetFilterString. Однако эта строка фильтра не включает форматы, не относящиеся к растровым изображениям, но поддерживаемые ТРВ-Редактором, например SVG через Skia4Delphi. Поэтому для получения строки фильтра, включающей как растровые, так и нерастровые форматы, можно использовать метод GetFileDialogFilter

Графические классы

В VCL и Lazarus изображения представлены различными графическими классами. Все они унаследованы от TGraphic.

В FireMonkey графические классы унаследованы от TRVGraphicFM (также доступного как TRVGraphic). Можно использовать два класса:

TRVRasterGraphicFM (также доступен как TRVBitmap) – оболочка для FireMonkey TBitmap, поддерживающая множество растровых форматов;

TRVSvgImageSkiaFM – оболочка для TSkSvgBrush из Skia4Delphi, поддерживающая SVG-изображения.

Выбор графических классов по умолчанию [VCL и LCL]

RegisterPngGraphic регистрирует графический класс PNG для использования в ТРВ-Редакторе. Вызовите этот метод один раз при запуске приложения, например в разделе initialization модуля главной формы. Если класс PNG зарегистрирован, компоненты ТРВ-Редактора могут сохранять и загружать PNG-изображения в файлах RTF и DocX. При необходимости изображения bitmap также можно сохранять в RTF как PNG – см. свойство TCustomRichView.RTFOptions (rvrtfPNGInsteadOfBitmap).

По умолчанию в Delphi 2009 и более новых версиях ТРВ-Редактор регистрирует стандартный TPngImage как графический формат PNG. Поэтому, если вы не хотите использовать другой класс для PNG-изображений, этот метод необходим только для Delphi 2007 и более старых версий. Например, можно использовать TPngObject Густаво Хуффенбахера Дауда (Gustavo Huffenbacher Daud) – бесплатный класс для PNG-изображений (скачать). В Lazarus TPortableNetworkGraphic регистрируется автоматически.

RegisterJpegGraphic регистрирует графический класс JPEG для использования в TRichView. Если этот метод не вызывается, TRichView использует TJPEGImage. Этот класс применяется при загрузке JPEG-изображений, встроенных в RTF.

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

По умолчанию используются следующие классы:

изображения bitmap – TBitmap;

значки (icons) – TIcon;

метафайлы – TMetafile в Delphi, не задан в Lazarus;

JPEG – TJPEGImage;

PNG – TPngImage в Delphi 2009+, TPortableNetworkGraphic в Lazarus, в остальных случаях не задан;

GIF – TGifImage в Delphi 2007+, если в проект включён RVGifAnimate2007; в более ранних версиях Delphi – если включён RVGifAnimate; в остальных случаях не задан;

TIFF – TWicImage в Delphi 2010+, в остальных случаях не задан;

AnyMap – TPortableAnyMapGraphic в Lazarus, в остальных случаях не задан;

SVG – TSkSvgGraphic (требуется Skia4Delphi); включите модуль RVSkia в проект.

Экспорт в HTML [VCL и LCL]

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

Изображения графических классов, зарегистрированных для следующих форматов, не преобразуются: rvgtJPEG, rvgtPNG, rvgtGIF, rvgtSVG, rvgtWebP.

RegisterHTMLGraphicFormat позволяет задать дополнительные графические форматы для HTML. Вызовите этот метод при запуске приложения, например в разделе initialization модуля главной формы. Изображения этих форматов сохраняются в HTML без преобразования в JPEG.

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

стандартный TPngImage в Delphi 2009+;

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

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

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

Создание графических объектов

CreateGraphic создаёт графический объект указанного класса. Для Delphi/C++Builder 6 и более новых версий этот метод эквивалентен вызову GraphicClass.Create. Для более старых версий Delphi метод содержит обход ошибки в TGraphic.

CreateGraphicByType создаёт графический объект указанного типа – см. раздел «Выбор графических классов по умолчанию» выше.

LoadFromFile создаёт графический объект, загружает в него файл FileName и возвращает этот объект. Сначала ТРВ-Редактор пытается самостоятельно определить подходящий графический класс по содержимому файла. Если это не удаётся, он пытается использовать средства VCL/LCL/FireMonkey для распознавания и загрузки изображения: в VCL/LCL – по расширению файла, в FireMonkey – по содержимому. Если и это не удаётся, метод возвращает nil.

LoadFromStream создаёт графический объект, загружает в него содержимое потока и возвращает этот объект. Формат изображения определяется по содержимому. Если метод не может распознать графический формат или для этого типа изображения не задан графический класс, он возвращает nil.

См. также

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