|
<< Нажмите, чтобы показать Содержание >> TCustomRichView.OnImportPicture |
Происходит при загрузке (из файла или потока) документа, содержащего ссылки на файлы изображений.
type
TRVImportPictureEvent =
procedure (Sender: TCustomRichView;
const Location: TRVUnicodeString; Width, Height: Integer;
var Graphic: TRVGraphic) of 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;