因特殊图片打印要求,用了query1+DBGrid1+QuickRep1+QRImage 这几个控件来实现:1.图片存储在D:\Pictuer 文件夹,图片名称存储在数据库表 TPicture.2.在QuickRep1上放了20个QRImage来显示20张图片,也就是在一页A4纸上打印20张图片.3.已经查询要打印图片的名称到query1,并且显示了图片的名称在DBGrid1,
根据每次打印图片数量的不同,有时1-150左右不等.假如要打印98张图片,
怎样从query1读取图片名称和加载对应的D:\Pictuer 文件夹的图片
到QuickRep1上显示,当打印完第一页图片后,接着打印第二页,以此类推...  各位有什么好的实现方法??? 高分相送

解决方案 »

  1.   

    哦,这是我刚刚研究的问题,已经解决,其实只需要一个QRImage控件就够了.
    说下我的解决方法.
    用的是Access数据库,ADOQuery,QRImage,QuickRep,QRDBText这几个控件实现双列打印(也可以更多列,自己设置).
    假设一下你的数据库TPicture表有两个字段,Name(图片名)和Image(OLE对象存图片).
    步骤:
    1.新建Form1,添加ADOQuery1,设置数据库连接.其SQL属性添加查询语句'select * from TPicture';
    2.添加QuickRep1,属性:Page->Comlumns设置为2(列数);DataSet设置为ADOQuery1;
    3.添加QRBand1,BandType属性设为rbDetail,注意!!!如果这里设置不正确,就不能显示出数据库所有内容.
    4.在QRBand1上添加QRImage1和QRDBText1,其中QRImage所有属性默认;QRDBText1的DataSet设为ADOQuery1,DateField属性设为'Name'(TPicture表里的字段)
    5.真正有技术含量的地方在这里.强调!!! 在ADOQuery1的AfterScroll事件中添加读取图象的代码,QRImage默认读取的格式是BMP,如果你的数据库存是JPEG格式需要自己转换,恕不赘述.
    6.好了,到这里已经基本搞定,加个按钮Button1,在Click事件里添加代码'QuickRep1.Preview;'F9运行程序点Button1就可以看到预览页面了.
    7.如果有其它不明白的地方,可以加我QQ17382959,注明CSDN学友就可以了
      

  2.   

    楼上,我用的是SQL SERVER2000数据库,TPicture是一个只存储图片名称的表,里面并不存储图片,
    注意:我的图片是存储在D盘上 D:\picture文件夹里,图片格式是*.JPG
    现在想'select TPName from TPicture'查询出图片的名称,
    然后加载存储在D盘上 D:\picture文件夹里的图片到QuickRep1上,实现多页打印.可有好方法?  TKS!
      

  3.   

    呵呵,刚才发的急了,其实有办法的.注意我说的第5条,你肯定没好好理解!
    可以试下这样.
    还是在ADOQuery1的AfterScoll事件里添加以下代码:procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
    var JpegPic : TJpegImage;
    begin
        if (not ADOQuery1.Bof) or (not ADOQuery1.Eof) then
        begin
            JpegPic := TJpegImage.Create;
            try
            JPEGPic.LoadFromFile(ADOQuery1.FieldByName('Name'),AsString);
            //这里用数据库里的文件名,当然需要是完整带路径的文件名
            QRImage1.Picture.Graphic := JPegpic;        
            except
            end;
            JpegPic.Free;
        end;
    end;哈哈,实现了吧?
      

  4.   

    谢谢你的关注,
    几万张的图片存储到数据库里面占用空间太大了,
    所以我选择把图片存储在D盘的 D:\picture文件夹里,
    并且每次所要打印的图片数量是不同的,1、2、3--150张左右不等,
    另外我把图片名称单独存储在数据库表TPicture,
    这样就可以根据要查询出的图片数量和名称,
    来加载D:\picture文件夹里的图片实现多页打印了。
       就是没有找到好的实现方法???继续等待。
      

  5.   

    用madbo(风轻扬{十年磨一剑}) 的方法已经实现楼主需要的了,至少打几张、打哪一张纯属于另外一回事,可以通过查询图片名称或者其它方法解决