|
<< Нажмите, чтобы показать Содержание >> 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-изображения.
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 или 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.
▪Как использовать сторонние графические классы в ТРВ-Редакторе