Печать Canvas из Делфи
В общем-то в названии темы и вопрос, есть такой канвас
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;
Как это перенести в отчет ? Чтобы можно было и печатать, и экспорт сделать
Комментарии
Если постоянная - сохранить как PNG, он поддерживает прозрачность
и uses не забыть добавить
uses
pngimage,
Graphics;