fpSpreadSheet: вставка картинки TChart [РЕШЕНО]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

fpSpreadSheet: вставка картинки TChart [РЕШЕНО]

Сообщение Владимир » 17.01.2022 19:12:23

Всем доброго! Озаботился вставкой графики в лист.
Прямой путь
Код: Выделить всё
Chart.SaveToBitmapFile('FieName');
Sheet.WriteImage(1,1,'FileName',0.0,0.0,0.01,0.01);
не устраивает, хотелось бы обойтись без записи на диск.
fpSpreadSheet представляет еще ф-цию вставки рисунка
Код: Выделить всё
Sheet.WriteImage(1,1,TStream,0.0,0.0,0.01,0.01);


Вопрос: как поместить Chart в Stream?

Добавлено спустя 14 часов 56 минут:
Вот решение
Код: Выделить всё
uses ....clipbrd
var
myBmp:TBitmap;
ms:TMemoryStream;
begin
     Chart.CopyToClipboardBitmap; //копируем в буфер
     myBmp:=TBitMap.Create;
     myBmp.LoadFromClipboardFormat(CF_BitMap); //читаем из буфера в bmp
     ms:=TMemoryStream.Create;
     myBmp.SaveToStream(ms);  //грузим в Stream
     ms.Seek(0, soFromBeginning);
     wSheet.WriteImage(1,1,ms,0.0,0.0,0.01,0.01); //вставляем картинку
    //1,1 - строка,колонка ячейки; 0.0,0.0 - смещение картинки отн. лев.верхн. угла ячейки;0.01,0.01 - масштаб (здесь уменьшен в 100 раз)
     ms.Free;
     myBmp.Free;                     
end;
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: fpSpreadSheet: вставка картинки TChart [РЕШЕНО]

Сообщение jonyrh » 22.07.2022 16:21:18

Может, конечно уже поздно, но я поделюсь своим способом, без использования буфера, у меня используется в потоках))

Код: Выделить всё
uses
  fpstypes, fpspreadsheet, fpsallformats, fpscell, fpsPageLayout,
  TAGraph, TASources, TASeries, TAStyles,  TALegend, TAChartUtils,
  TADrawUtils, TADrawerCanvas, FPVectorial, TADrawerFPVectorial;

...

var
ChartSVGDocument: TvVectorialDocument;
  ChartImageStream: TMemoryStream;
  ChartImageDrawer: IChartDrawer;

begin
...
ChartImageStream:= TMemoryStream.Create;
   ChartImageStream.Position:=0;
   ChartSVGDocument:= TvVectorialDocument.Create;
   ChartSVGDocument.Width := Chart.Width;
   ChartSVGDocument.Height := Chart.Height;
   ChartSVGDocument.AddPage;
   ChartImageDrawer:= TFPVectorialDrawer.Create(ChartSVGDocument.GetCurrentPageAsVectorial);
   Chart.Draw(ChartImageDrawer, Rect(0, 0, Chart.Width, Chart.Height));
   ChartSVGDocument.WriteToStream(ChartImageStream, vfWindowsMetafileWMF);
   ChartImageStream.Position:=0;

   sheetDays.WriteImage(0, 0, ChartImageStream, 0, 0, 0.35, 0.258);

   ChartSVGDocument.Free;
...
end;

Аватара пользователя
jonyrh
незнакомец
 
Сообщения: 6
Зарегистрирован: 10.09.2020 12:29:24


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru