form上有几个image.image里都放着图片,请问如何把这几张图片按照它在form上的
排列和大小打印出来,我知道打印一张图片用print.canvas,但打印几张图片就不知道怎么办了。我感觉不会是有几个image就对应写几个print.canvas吧。(另外不用form.print).听说form.print打出来效果很差,只要能把图片打出来并且比较清晰就可以了(因为是图片,所以要求清晰)边距不用考虑,只要大体上在纸的中间就可以了。另外打印预览如何实现。谢谢各位。

解决方案 »

  1.   

    Printer.BeginDoc;
    // 设置 MyRect1 在打印机画布的位置和大小
    Printer.Canvas.StretchDraw(MyRect1,Image1.Picture.Bitmap);// 设置 MyRect2 在打印机画布的位置和大小
    Printer.Canvas.StretchDraw(MyRect2,Image2.Picture.Bitmap);
    ....Printer.EndDoc ;注释:MyRect1是TRect 类型,图片要打印到打印机画布上的矩形位置,
    调整MyRect1大小,以适应你的打印输出比例。
    Printer.Canvas是一块“布”,你想画什么,
    在Image2.Picture.Bitmap里定义,画在哪里,在MyRect2中定义
      

  2.   

    打印的位图只支持DIB格式。可以将一个非DIB格式的位图复制给一个临时的TBitmap对象,把
    TBitmap.HandleType特性设为bmDIB.这样就可以用:
    printer.begindoc;
     printer.canvas.draw(0,0,Bitmap);
    printer.enddoc;
      

  3.   

    to  LKJ99(永动机) :
      你好,谢谢你的回答,你的意思是几个image就对应写几个print.canvas?
      

  4.   

    呵呵,当然不是!
    你可以把多个IMAGE 画到 printer.canvas中一起打印!这个很简单的,只要你多花点时间,多试试,肯定多多OK!
      

  5.   

    to  LKJ99(永动机) :
    你好,那你上面的代码不就是对应写几个print.canvas么?不好意思,我第一次接触打印,不要笑话我。
      

  6.   


    哈哈!其实printer.canvas还是那个printer.canvas,
    只是利用MyRect1和MyRect2设置不同的打印位置。
      

  7.   

    to ehom(?!) 
      你好,你的意思是不是把每个图画到canvas上,然后用Printer.NewPage?to all
    请问大家打印预览如何实现。我下面的代码为什么不能用?
    var
    r1:TRect;
    begin
    r1:=Rect(0,0,97,81);
    form2.Canvas.StretchDraw(r1,image1.Picture.Graphic);
    form2.ShowModal;
    end;
      

  8.   

    调用NewPage以后,再对Canvas操作,这时就是另一页的打印任务,和前面的无关!
      

  9.   

    to ehom(?!) 
      你好,我是想在一页上打印这些图片,另外麻烦你帮我看一下上面的打印预览的代码为什么不能用。
      

  10.   

    to all:
    打印预览的代码改成下面的可以了(form2上加个image,并设为alClient)但是预览的图形很小,我知道如果打印的图象小需要用GetDeviceCaps取得打印机的分辨率并转换但是现在是预览为什么图形很小呢?var
    r1:TRect;
    begin
    r1:=Rect(0,0,97,81);
    form2.image1.Canvas.StretchDraw(r1,image1.Picture.Graphic);
    form2.ShowModal;
    end;