Печать Canvas из Делфи

отредактировано November 2013 Раздел: FastReport 4.0
В общем-то в названии темы и вопрос, есть такой канвас
procedure TUklonForm.BitBtn1Click(Sender: TObject);
var
  t,u,r : double;
  I, K : Integer;
  L : Extended;
begin
  Image1.Canvas.Brush.Color:=clBtnFace;
  Image1.Canvas.FillRect(Image1.ClientRect);
  //меняем цвет линии
  Image1.Canvas.Pen.Color := clBlack;
  //меняем толщину линии
  Image1.Canvas.Pen.Width:=1;
  K := Form1.StringGrid1.RowCount - 2;
  L := (Image1.ClientWidth - 30) / k;
  With Form1.StringGrid1 Do
  For i:=1 To RowCount-1 Do
  Begin
    //вертикальная линия
    Image1.Canvas.MoveTo(Round((i-1) * l) + 15, 140);
    Image1.Canvas.LineTo(Round((i-1) * l) + 15, 180);
     ///СГР+ПГР1
      If CheckBox1.Checked Then
   Begin
  AngleTextOut(Image1.Canvas,90, Round((i-1) * l)+3 ,129, Cells[2,i]);
  AngleTextOut(Image1.Canvas,90, Round((i-1) * l)+15 ,133, ('('+Cells[3,i]+')'));
  end else
  AngleTextOut(Image1.Canvas,90, Round((i-1) * l)+9 ,133, Cells[2,i]);
    /// Пикет число
    AngleTextOut(Image1.Canvas,90, Round((i-1) * l)+9 ,230, Cells[0,i]);
  //////
    If i>(RowCount-2) Then Break;
    u:=StrToFloat(Cells[2,i+1])-StrToFloat(Cells[2,i]);
    r:=StrToFloat(Cells[0,i+1])-StrToFloat(Cells[0,i]);
    t:=RoundTo((u/r),-4);

    If t>0 Then
    begin
      //Длина число
      Image1.Canvas.TextOut(Round((i-1) * l) + Round(L/2)+11 ,165, FloatToStr(r));


      //Уклон число
      Image1.Canvas.TextOut(Round((i-1) * l) + Round(L/2)+1 ,145, FloatToStr(t*1000));
      /// диагональ
      Image1.Canvas.MoveTo(Round((i-1)* l) + 15, 180);
      Image1.Canvas.LineTo(Round(i * l) + 15, 140);
    end else
    If t=0 Then
    begin
      //Длина число
      Image1.Canvas.TextOut(Round((i-1) * l) + Round(L/2)+10 ,165, FloatToStr(r));
      //Уклон число
      Image1.Canvas.TextOut(Round((i-1) * l) + Round(L/2)+10 ,145, FloatToStr(t*1000));
      //Диагональ (линия)
      Image1.Canvas.MoveTo(Round((i-1) * l) + 15, 160);
      Image1.Canvas.LineTo(Round(i * l) + 15, 160);
    end else
     /// Отрицательный уклон
    begin
      //Длина число
      Image1.Canvas.TextOut(Round((i-1) * l) + Round(L/2)+5 ,165, FloatToStr(r));
      //Уклон число
      Image1.Canvas.TextOut(Round((i-1) * l) + Round(L/2)+14 ,145, FloatToStr(t*1000*(-1)));
      /// диагональ
      Image1.Canvas.MoveTo(Round((i-1) * l) + 15, 140);
      Image1.Canvas.LineTo(Round(i * l) + 15, 180);
    end;
   End;
  //чертим линию
  //гор верх
  Image1.Canvas.MoveTo(15, 140);
  Image1.Canvas.LineTo(Round(L * K)+15, 140);
  //гор низ
  Image1.Canvas.MoveTo(15, 180);
  Image1.Canvas.LineTo(Round(L * K)+15, 180);
end;


procedure TUklonForm.BitBtn3Click(Sender: TObject);
begin
printer.BeginDoc;
printer.Canvas.CopyRect(rect(0,1500,8340,3500),Image1.Canvas,rect(0,0,Image1.Width,Image1.Height));
printer.EndDoc;
end;
Как это перенести в отчет ? Чтобы можно было и печатать, и экспорт сделать

Комментарии

  • gpigpi
    отредактировано 16:19
    Передайте Image1.Picture в TfrxPictureView.Picture
  • отредактировано 16:19
    А как передать всё нарисованные линии? Сейчас когда передаю по вашему примеру, то фон картинки голубоватый
  • отредактировано 16:19
    Картинка постоянная или изменяется?
    Если постоянная - сохранить как PNG, он поддерживает прозрачность
  • отредактировано 16:19
    Картинка меняется. А как в png сохранить?
  • отредактировано November 2013
    png := TPNGObject.create;
        try
            png.assign(Image1.Picture.Bitmap);
            png.savetofile('myImage.png');
        finally
            png.free
        end;
    


    и uses не забыть добавить
    uses
    pngimage,
    Graphics;

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.