TChart и LazReport: вставка круговой диаграммы в отчёт

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

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

Ответить
artem78
новенький
Сообщения: 50
Зарегистрирован: 09.08.2015 17:52:24

TChart и LazReport: вставка круговой диаграммы в отчёт

Сообщение artem78 »

Здравствуйте, уважаемые специалисты. Помогите чайнику с вставкой графика в LazReport. В шаблоне отчёта специально под это дело добавлен компонент типа Picture. Вот код, который формирует график и вставляет его в отчёт:

Код: Выделить всё

procedure TForm1.frReport1EnterRect(Memo: TStringList; View: TfrView);
var
  bmp : TBitmap;
  Ser: TPieSeries;
  Chart: TChart;
begin
  if View.Name='Chart' then
  begin
    { создание объектов }
    bmp := TBitmap.Create;
    Chart := TChart.Create(Nil {self});
    Chart.Width:=Round(View.Width);
    Chart.Height:=Round(View.Height);
    Ser := TPieSeries.Create({Chart} nil);
    Chart.AddSeries(Ser);

    try
      { наполнение данными }
      Ser.AddY(22, 'Avito'{, clGreen});
      Ser.AddY(5, 'Tvil'{, clRed});
      Ser.AddY(8, 'Sutochno'{, clBlue});
      Ser.Active:=True;

      Chart.Visible:=True;


      { вывод через bitmap в документ отчёта }
      bmp.SetSize(Round(View.Width), Round(View.Height));
      bmp.Canvas.Brush.Color := {clWhite} clSkyBlue;
      bmp.Canvas.FillRect(0, 0, bmp.Width, bmp.Height);
      Chart.PaintTo(bmp.Canvas, 0, 0);
      TFrPictureView(View).Picture.Bitmap := bmp;
    finally
      Chart.Free;
      //Ser.Free;
      bmp.Free;
    end;
  end;
end;  
Результат: область изображения закрашивается в цвет фона, но сам график не рисуется. Полдня мучаюсь, не пойму в чём проблема.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Первое что пришло в голову (не вникая в код) Chart.Free; и bmp.Free; точно там где нужно ? ( только упели нарисовать и тут же освободили память )
artem78
новенький
Сообщения: 50
Зарегистрирован: 09.08.2015 17:52:24

Сообщение artem78 »

Chart.Free; и bmp.Free
Попробывал заккоментировать эти две строчки, ничего не изменилось.

Добавлено спустя 21 минуту 36 секунд:
Эврика! Заменил

Код: Выделить всё

Chart.PaintTo(bmp.Canvas, 0, 0);
на

Код: Выделить всё

Chart.PaintOnCanvas(bmp.Canvas, Rect(0, 0, chart.Width, chart.Height));
и попёрло.
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Извини что мой совет был левым (ночью зачитался, а в 4-том часу голова варит с трудом :roll: )
Ответить