TCustomRichView.OnImportPicture

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

TCustomRichView.OnImportPicture

Происходит при загрузке (из файла или потока) документа, содержащего ссылки на файлы изображений.

type

  TRVImportPictureEvent =

    procedure (Sender: TCustomRichView;

    const Location: TRVUnicodeString; Width, Height: Integer;

    var Graphic: TRVGraphicof object;

 

property OnImportPicture: TRVImportPictureEvent;

Это событие может произойти:

При загрузке RTF или DocX. Обычно изображения сохраняются внутри файла/потока RTF/DocX. Но иногда RTF/DocX содержит ссылки на внешние файлы изображений (имена файлов или URL-адреса).

При загрузке HTML или Markdown.

При загрузке XML (с использованием компонента TRichViewXML).

При приёме URL-адреса изображения в результате перетаскивания, если rvoDragDropPicturesFromLinks в EditorOptions.

Если эти ссылки локальные (например, 'c:\images\image.bmp'), TRichView может загрузить эти изображения самостоятельно. Но если изображения находятся в интернете (например, 'https://www.trichview.com/headers/what_is.gif'), имеет смысл обработать это событие и загрузить изображение.

Входные параметры:

Location имя файла изображения, включая путь к нему (локальное или URL);

Width, Height зарезервированы, равны 0;

Graphic nil.

Выходные параметры:

Graphic присвойте этому параметру изображение. Если вы оставите его равным nil, TRichView попытается загрузить его самостоятельно.

 

При использовании Инструментов интерфейса ТРВ (RichViewActions) можно применять компоненты-загрузчики, если чтение файла было вызвано визуальными командами (Открыть, Вставить файл, Вставить и Специальная вставка). Этот загрузчик также можно использовать при OLE-перетаскивании, см. события OnBeforeOleDrop и OnAfterOleDrop.

 

Пример: загрузка изображений с HTTP-адреса с помощью Indy (IdHTTP1: TIdHTTP)

uses RVFuncs;

 

{ TMyRichView.OnImportPicture }

procedure TMyForm.MyRichViewImportPicture(Sender: TCustomRichView;

  const Location: TRVUnicodeString; Width, Height: Integer;

  var Graphic: TRVGraphic);

var Stream: TMemoryStream;

begin

  if Pos('http://', AnsiLowerCase(Location))=1 then

  begin

    Stream := TMemoryStream.Create;

    try

      IdHTTP1.Get(Location, Stream);

      Stream.Position := 0;

      Graphic := RVGraphicHandler.LoadFromStream(Stream);

    except

      Graphic := nil;

    end;

    Stream.Free;

  end;

end;