CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

怎么实现ADOQuery,ADODatasSet将查询出来的内容用报表打印,动态打印

楼主alicelili()2006-06-02 20:20:08 在 Delphi / VCL组件开发及应用 提问

??? 问题点数:10、回复次数:2Top

1 楼wudi_1982(向伴水学习|胃出血,住院中)回复于 2006-06-02 20:52:14 得分 0

把dbgrid的内容打印出来就可以了啊Top

2 楼wudi_1982(向伴水学习|胃出血,住院中)回复于 2006-06-02 20:53:54 得分 0

参考一下把。选择自   CYRTSOFT   的   Blog    
  procedure   PrintDbGrid(DataSet:TDataSet;DbGrid:TDbGrid;Title:String);  
  var  
  PointX,PointY:integer;  
    ScreenX:integer;  
    i,lx,ly:integer;  
    px1,py1,px2,py2:integer;  
    RowPerPage,RowPrinted:integer;  
    ScaleX:Real;  
    THeight:integer;  
    TitleWidth:integer;  
    SumWidth:integer;  
    PageCount:integer;  
    SpaceX,SpaceY:integer;  
    RowCount:integer;  
  begin  
  PointX:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);  
  PointY:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);  
    ScreenX:=Round(Screen.PixelsPerInch/2.54);  
  ScaleX:=PointX/ScreenX;  
    RowPrinted:=0;  
    SumWidth:=0;  
    printer.BeginDoc;  
    With   Printer.Canvas   do  
    begin  
      DataSet.DisableControls;  
        DataSet.First   ;  
        THeight:=Round(TextHeight('我')*1.5);//设定每行高度为字符高的1.5倍  
        SpaceY:=   Round(TextHeight('我')/4);  
        SpaceX:=Round(TextWidth('我')/4);  
        RowPerpage:=Round((printer.PageHeight-5*PointY)/THeight);   //上下边缘各2厘米  
        ly:=2*PointY;  
        PageCount:=0;  
      while   not   DataSet.Eof   do  
        begin  
          if   (RowPrinted=RowPerPage)   or   (RowPrinted=0)   then  
            begin  
              if   RowPrinted<>0   then  
              Printer.NewPage;  
                RowPrinted:=0;  
                PageCount:=PageCount+1;  
                Font.Name:='宋体';  
                Font.size:=16;  
                Font.Style:=Font.Style+[fsBold];  
                lx:=Round((Printer.PageWidth-TextWidth(Title))/2);  
                ly:=2*PointY;  
                TextOut(lx,ly,Title);  
                Font.Size:=11;  
                Font.Style:=Font.Style-[fsBold];  
                lx:=Printer.PageWidth-5*PointX;  
                ly:=Round(2*PointY+0.2*PointY);  
                if   RowPerPage*PageCount>DataSet.RecordCount   then  
                  RowCount:=DataSet.RecordCount  
                else  
                RowCount:=RowPerPage*PageCount;  
                TextOut(lx,ly,'第'+IntToStr(RowPerPage*(PageCount-1)+1)+'-'+IntToStr(RowCount)+'条,共'+IntToStr(DataSet.RecordCount)+'条');  
                lx:=2*PointX;  
                ly:=ly+THeight*2;  
                py1:=ly-SpaceY;  
                if   RowCount=DataSet.RecordCount   then  
                  py2:=py1+THeight*(RowCount-RowPerPage*(PageCount-1)+1)  
                else  
                  py2:=py1+THeight*(RowPerPage+1);  
                SumWidth:=lx;  
                for   i:=0   to   DBGrid.Columns.Count-1   do  
                begin  
                px1:=SumWidth-SpaceX;  
                    px2:=SumWidth;  
                    MoveTo(px1,py1);  
                    LineTo(px2,py2);  
                    TitleWidth:=TextWidth(DBGrid.Columns[i].Title.Caption);  
                    lx:=Round(SumWidth+(DBGrid.Columns[i].width*scaleX-titleWidth)/2);  
                    TextOut(lx,ly,DBGrid.Columns[i].Title.Caption);  
                    SumWidth:=Round(SumWidth+DBGrid.Columns[i].width*scaleX)+SpaceX*2;  
                end;  
                px1:=SumWidth;             //画最后一条竖线  
                px2:=SumWidth;  
                MoveTo(px1,py1);  
                LineTo(px2,py2);  
                px1:=2*PointX;                         //画第一条横线  
            px2:=SumWidth;  
              py1:=ly-SpaceY;  
              py2:=ly-SpaceY;  
                MoveTo(px1,py1);  
                LineTo(px2,py2);  
                py1:=py1+THeight;  
                py2:=py2+THeight;  
                MoveTo(px1,py1);  
                LineTo(px2,py2);  
            end;  
        lx:=2*PointX;  
            ly:=ly+THeight;  
            px1:=lx;  
            px2:=SumWidth;  
            py1:=ly-SpaceY+THeight;  
            py2:=ly-SpaceY+THeight;  
            MoveTo(px1,py1);  
            LineTo(px2,py2);  
            for   i:=0   to   DBGrid.Columns.Count-1   do  
            begin  
                TextOut(lx,ly,DataSet.FieldByname(DBGrid.Columns[i].Fieldname).AsString);  
                lx:=Round(lx+DBGrid.Columns[i].width*ScaleX+SpaceX*2);  
            end;  
            RowPrinted:=RowPrinted+1;  
            DataSet.next;  
        end;  
        DataSet.first;  
        DataSet.EnableControls;  
    end;  
    printer.EndDoc;  
  end;  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:alicelili

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo