⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 21.htm

📁 水木清华的BBS文章
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://bbs.tsinghua.edu.cn"><font face="黑体"><big><big>水木清华★</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">         Delphi编程                            (BM: strayli FlyingBoy)          </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="454"> <p align="center">[<a href="index.htm">回到开始</a>][<a href="3.htm">上一层</a>][<a href="22.htm">下一篇</a>]
<hr><p align="left"><small>发信人: strayli (stray), 信区: Delphi <br>

标  题: Delphi 3中报表的制作 <br>

发信站: BBS 水木清华站 (Wed Sep 30 21:02:22 1998) <br>

  <br>

[转载] <br>

Borland Delphi是当今优秀的Windows可视化开发工具之一,今年 <br>

5月份推出的Delphi3是一个真正的32位开发平台,比Delphi 2增加了 <br>

不少定制控件。Delphi 3没有捆绑ReportSmih 报表制作工具,但同时 <br>

增加了QReport组中报表制作控件的功能,使制作报表更加方便灵活。 <br>

在Delphi 3中除了可以采用QReport组中报表制作控件来制作报表外, <br>

还可利用打印机画布直接向打印机输出报表。下面将详细介绍这两种 <br>

方法。 <br>

    用打印机画布制作报表 <br>

    Delphi引进了画布的概念,使向打印机输出和向屏幕的输出具有 <br>

相同的方法,直接向打印机的画布输出线条和字符串,即可制作出任意 <br>

规格的报表。 <br>

    首先,把支持打印机的Printers单元手工加到uses域里,然后在打 <br>

印事件中调用Tprintr 对象来制作报表。下面我们来看一个实际例子 <br>

。假设在当前Form1上有一按钮名为Print-ep ;在Dialogs控件组选取 <br>

一PrintDialog控件加到Form1中,命名为printdg1;在Additional控件 <br>

组中选取一StringGrid控件加到Form1中,命名为temsgrid1,设其网格 <br>

为10行10列,并假设已完成了在temsgrid1控件中显示一10行10列的数 <br>

据库表数据的准备工作,然后在Print—rpCl ick事件中打印报表。程 <br>



序示例如下: <br>

    procedure TForm1.Print-repClick(Sender:TObject); <br>

    var i,j,cp,ph,pw,w,h:integer; <br>

    beginif printdg1.Execute  then //打开打印对话框 <br>

    begin <br>

    for cp:=1 to printdg1.copies do //打印份数 <br>

    begin <br>

      with printer do <br>

      begin   orientation:=poPortrait;  //设置纵向打印方式 <br>

      title:=‘打印报表例子’;//打印任务标题 <br>

      pw:=pagewidth;//获得当前设置的打印纸页宽 <br>

      ph:=pageheight;       //获得当前设置的打印纸页高 <br>

      h:=2104; <br>

    w:=1488; <br>

    begindoc;//开始打印 <br>

    //下面画表格,先画11条横线 <br>

    for i:=1 to 11 do <br>

      begin <br>

        canvas.moveto(100*pw div w,i*100*ph div h); <br>

        canvas.lineto(1100*pw div w,i*100*ph div h); <br>

      end; <br>

    //再画11条竖线 <br>

    //再画11条竖线 <br>

    for i:=1 to 11 do <br>

      begin <br>

        canvas.moveto(i*100*pw div w,100*phdiv h); <br>

        canvas.lineto(i*100*pw div w,1100*ph div h); <br>

      end; <br>

    //填上数据 <br>

    for j:=1 to 10 do <br>

      for i:=1 to 10 do <br>

        canvas.textout((100*i+10)*pwdiv w,(100*j+10)*ph div <br>

h,temsgrid1.cells[- 1,j-1]); <br>

    enddoc;//结束打印end; <br>

    end; <br>

    end; <br>

    end; <br>

    在上面程序中,先打开打印对话框,然后再设置打印方向、打印标 <br>

题并获取当前打印纸的宽高点数。在程序中,为了使在不同打印分辨 <br>

率中有相同的打印外观,我们以180×180分辨率的 A4纸点数2104×14 <br>

88做为基准换算打印坐标。Printer.Canvas.Moveto(x,y)用于移动打 <br>

印机画布坐标到(x,y)处;Printer.Canvas.Lineto(x,y)用于从画布当 <br>

前坐标处画一直线至x ,y);Printer.Canvas.Textout(x,y,Text)用于 <br>

在画布的坐标(x,y)处以当前字体输出字符串Text。为了使报表更加 <br>

美观和生动,可以设置打印机画布的字体、大小,还可以插入图片等。 <br>



    用QReport组控件制作报表 <br>

    QuickReport是Quick Soft Development公司专为Delphi设计的 <br>

用于制作报表的工具。Delphi 3中QReport组控件十分丰富,只要很好 <br>

地利用这些控件就能制作出效果不错的报表来。 <br>

  <br>

    1.建立一个报表 <br>

    (1)首先我们在Form2上放置一TQuickRep控件,TQuickRep控件是 <br>

建立一报表必不可少的控件。可以改变该控件的属性设置,以使其外 <br>

观符合要求。在缺省情况下,TQuickRep控件的尺寸为放置在窗口上的 <br>

尺寸,TQuickRep控件根据当前控件的尺寸来自动设置数据区的范围。 <br>

    改变TQuickRep控件外观最简单的方法是:在TQuickRep控件内单 <br>

击鼠标右键,在弹出菜单中选择Report Settings项来打开设置窗口。 <br>

    (2)设置数据。把TQRBand控件放到TQuickRep控件上,并把BandTy <br>

pe属性设为rbTitle,缺省情况下Align属性是a1Top。然后把TQRLabel <br>

控件放到TQRBand控件上,修改它的Caption属性,作为报表的标题。 <br>

    (3)把数据放到报表上。首先再将一个TQRBand控件放到TQuickRe <br>

p控件上,并把BandTye 属性设为rbDetail,然后把一个TTable控件(名 <br>

为Table1)放到From2上,设置它的DataBaseam e属性和TableName属性 <br>

,并把TTable控件的Active属性设为True。与Delphi2不同的是,Dlph <br>

i3中TQuickRep控件没有DataSource属性而以DataSet属性来代替,因 <br>

此设置TQuickRep控件的DataSet属性值为Table1。 <br>

    (4)把一个TQRDBText控件放到第二个TQRBand控件上,设置它的Da <br>

    (4)把一个TQRDBText控件放到第二个TQRBand控件上,设置它的Da <br>

taSet属性值为Table, 设置DataField属性为要显示的字段。 <br>

    到此,就可在TQuickRep内单击鼠标右键,在弹出菜单中选择Revie <br>

w项来预览报表。 <br>

    2.预览及打印报表 <br>

    在运行期间也可以调用TQuickRep的Preview方法来预览报表,在 <br>

预览窗口中可单击打印按钮来打印报表,但也可直接调用TQuickRep的 <br>

Print方法来打印报表。 <br>

    3.给报表的数据画上网格 <br>

    在省缺情况下,报表的数据周围是没有网格的。我们可以给数据 <br>

周围加上网格,使其看起来更像一个表格,方法是设置TQRBand控件的 <br>

高度与TQRDBText高度控件相同,将所有的TQRDT ext控件的AutoSize <br>

属性设为False,并将它们首尾相连,然后将每一个TQRDBText控件的Fr <br>

me 的子属性DrawBottom、DrawLeft、DrawRight、DrawTop设为True, <br>

子属性Style设为poSoid。这样即可加上网格线。 <br>

    QReport控件组共有16种报表制作工作,以上只是一个粗略的介绍 <br>

,不能尽述其强大的功能。在具体应用中,用户可以通过加载其它报表 <br>

制作控件设计出有个性的报表来。 <br>

    两种方法的比较 <br>

    以上两种制作报表的方法各有千秋。用QReport组控件来制作报 <br>

表的方法比较简单,但是当报表较多时,用此方法显得较笨拙,并且使 <br>

编译后的可执行文件急剧增大。用打印机画布制作报表的方法比较繁 <br>

重,必须根据实际的报表来设计每一条线的起止坐标,算好每个坐标点 <br>



的值,但当报表较多时,用此方法显得较灵活,并且使编译后的可执行 <br>

文件的代码量增加不多,因此在这种情况下建议选用此方法。 <br>

  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: gps.auto.ustc.e] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="3.htm">上一层</a>][<a href="22.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -