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.

См. также

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