procedure TButton1.click;//先画图
begin
  with image1.canvas do
  begin
    moveto(10,10);
    lineto(10,280);
    lineto(280,280);
  end;
end;
//再打印输出,针打无反应,激光打印机走一页空白纸
procedure TButton2.click;
var scaleX,scaleY:integer;
    R:TRect;
begin
  Printer.begindoc;
  Pr:=Rect(0,0,printer.paperwidth,printer.paperheight);
  with printer do
  try
    scaleX:=GetDeviceCaps(Handle,logPixelsX)div PixelsPerInch*2;
    scaleY:=GetDeviceCaps(Handle,logPixelsY)div PixelsPerInch*2;
    R:=Rect(0,0,Image1.Picture.Width*scaleX,Image1.Picture.Height*scaleY);
    canvas.stretchdraw(R,Image1.Picture.Graphic);
    //canvas.CopyRect(Pr,image1.canvas,R);
    finally
  enddoc;
  end;end;
我的要求是先对image1.canvas画曲线,然后将其复制到打印机画布输出

解决方案 »

  1.   

    procedure CanvasToCanvas(SrcCanvas,DestCanvas :TCanvas)
    begin
      DestCanvas.CopyRect(Rect(0,0,Image.width,Image.height),DestCanvas,Rect(0,0,Printer.Width,Printer.height));
    end;
      

  2.   

    BeginDoc;
      scaleX:=GetDeviceCaps(Handle,logPixelsX) div Screen.PixelsPerInch * 2;
      scaleY:=GetDeviceCaps(Handle,logPixelsY) div Screen.PixelsPerInch * 2;
      //Canvas.Draw(0,0,FImg.Picture.Graphic);
      Canvas.StretchDraw(Rect(FImg.Left div 2 ,FImg.Top,(FImg.Width + FImg.Left) * scaleX ,(FImg.Top + FImg.Height) * scaleY),FImg.Picture.Graphic);
      //Canvas.CopyRect(Rect(0,0,FImg.Width,FImg.Height),Canvas,Rect(0,0,PageWidth,PageHeight));
      EndDoc;
    楼主我这样做可以! 但是安你的确实不行。
      

  3.   

    这样做确实有一点问题,我觉得用临时文件存储,然后用image1.picture.loadfromfile读出来可能可以。楼主不妨试一下。