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

📄 delphi+-

📁 Delphi技巧
💻
字号:
<html>

<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title></title>
</head>

<body bgcolor="#FFFFFF">

<p><a href="/cgi-bin/seaftg/ccw97/9736/1?kw=delphi"><img
src="/icons/index.gif" alt="返回"></a> </p>

<hr size="4">

<p align="right">1997年 .第30期 .软件与编程版 </p>

<p><i>编程技巧 </i></p>

<hr>

<hr size="5">

<h1 align="center">Delphi文本和图形的打印 </h1>

<p align="right"><i>李旭东 </i></p>

<p>对于每一个Windows应用程序开发者来说,打印功能的实现都是极为棘手的,因为要涉及到相当多的代码,而且常常是相当复杂,但是在Delphi中实现文本和图像的打印功能却是非常容易的。
</p>

<h4 align="center">文本的打印功能 </h4>

<dl>
    <dd>Delphi中文本的打印功能就如同在DOS中一样容易,需要做的只是取得打印参数,打开打印机,然后发送文本的每一行内容。在Delphi中提供了一个printers程序单元,它说明了一个tprinter对象,封装了Windows打印工作和输出打印机之间的接口,并提供常用的属性和方法。其中画布canvas是一个非常有用的属性,它代表了当前打印文件的表面,是以图形方式来工作的,整个打印输出工作仅仅是将打印的内容输出到tprinter的属性canvas上,当全部输出工作完成以后,打印对象(tprinter)把canvas的属性值送到打印机上去。
    </dd>
    <dd>下面举例来说明如何通过Delphi实现文本内容的打印。在Delphi中提供了printdialog
        、printersetupdialog两个控件允许我们进行打印机以及其他影响打印输出的选择,此外最重要的一点是要想实现打印功能必须在编译程序以前将printers加入到interface或者impl
        ementation的UESE语句当中,因为printer单元包括assignprn和其他控制打印机的过程。
    </dd>
    <dd>首先在From当中加入memo、printdialog、printersetupdialog和两个BUTTON控件,两个
        BUTTON的CAPTION分别为&quot;打印设置&quot;和&quot;打印&quot;。然后编写BUTTON的事件驱动程序。本例比较简单,只要单击&quot;打印&quot;按钮时便可以在打印机上输出文件0S2.TXT。代码如下:
    </dd>
    <dd>implementation </dd>
    <dd>uses printers; </dd>
    <dd>{$R *.DFM} </dd>
    <dd>procedure TForm1.BitBtn1Click(Sender: TObject); </dd>
    <dd>begin </dd>
    <dd>printersetupdialog1.execute; </dd>
    <dd>//选择输出的打印机以及其他打印控制选项 </dd>
    <dd>end; </dd>
    <dd>procedure TForm1.BitBtn2Click(Sender: TObject); </dd>
    <dd>var </dd>
    <dd>lines:integer; </dd>
    <dd>prntext:system.text; </dd>
    <dd>//将PRNTEXT声明为一个在SYSTEM程序单元当中定义的文本文件
    </dd>
    <dd>begin </dd>
    <dd>if printdialog1.execute then </dd>
    <dd>assignprn(prntext); //将PRNTEST分配给打印机 </dd>
    <dd>rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件
    </dd>
    <dd>printer.canvas.font:=memo1.font; </dd>
    <dd>//把当前MEMO1的字体指定给打印对象的CANVAS的字体属性
    </dd>
    <dd>for lines:=0 to memo1.lines.count-1 do </dd>
    <dd>writeln(prntext,memo1.lines[lines]); </dd>
    <dd>//把MEMO的内容写到打印机对象 </dd>
    <dd>system.close(prntext); //关闭打印文件 </dd>
    <dd>end; </dd>
    <dd>procedure TForm1.FormCreate(Sender: TObject); </dd>
    <dd>begin </dd>
    <dd>memo1.lines.loadfromfile(‘c:\dos\os2.txt’); </dd>
    <dd>//在FORM建立时读入C:\DOS\S2.TXT文件 </dd>
    <dd>end; </dd>
    <dd>end. </dd>
    <dd><h4 align="center">图形的打印功能 </h4>
    </dd>
    <dd>简单的图形打印功能也如打印文本一样容易,只是告诉打印机对象(tprinter)开始打印
        ,把图形复制到打印机上去,最后告诉打印机结束打印工作。
    </dd>
    <dd>举例说明:将上面的例子中的memo控件换成image控件,再经过一些简单修改,图形打印的代码如下:
    </dd>
    <dd>procedure TForm1.BitBtn1Click(Sender: TObject); </dd>
    <dd>begin </dd>
    <dd>if printdialog1.execute then </dd>
    <dd>begin </dd>
    <dd>printer.begindoc; </dd>
    <dd>printer.canvas.draw(0,0,image1.picture.graphic); </dd>
    <dd>printer.enddoc; </dd>
    <dd>end; </dd>
    <dd>end; </dd>
    <dd> </dd>
    <dd>在这种情况下,使用的是打印机的分辨率,图形在页面的左上角开始打印输出,打出的图形很小,通常不能符合要求。但是利用打印机画布canvas的stretchdraw方法,我们可以对图形进行灵活处理,canvas的stretchdraw方法声明为:
    </dd>
    <dd>procedure StretchDraw(const Rect: TRect; Graphic:
        TGraphic); </dd>
    <dd> </dd>
    <dd>其中的Rect参数代表图形输出区域的大小,Trect的类型声明为:
    </dd>
    <dd>TRect = record </dd>
    <dd>case Integer of </dd>
    <dd>0: (Left, Top, Right, Bottom: Integer); </dd>
    <dd>1: (TopLeft, BottomRight: TPoint);end; </dd>
    <dd> </dd>
    <dd>因此我们只要调整RECT的大小及其在打印页面上的位置,进而达到满意的效果,下面不断放大图形,充满我们定义的矩形区域,并将其定位在打印机画布(canvas)的中央然后输出。代码如下:
    </dd>
    <dd>procedure TForm1.Button1Click(Sender: TObject); </dd>
    <dd>VAR </dd>
    <dd>strect:Trect; //定义打印输出矩形框的大小 </dd>
    <dd>temhi,temwd:integer; </dd>
    <dd>begin </dd>
    <dd>if printdialog1.execute then </dd>
    <dd>begin </dd>
    <dd>temhi:=image1.picture.height; </dd>
    <dd>temwd:=image1.picture.width; </dd>
    <dd>while (temhi<printer.pageheight div 2)and //将图形放大到打印页面的1/2
    </dd>
    <dd>(temwd<printer.pagewidth div 2) do </dd>
    <dd>begin </dd>
    <dd>temhi:=temhi+temhi; </dd>
    <dd>temwd:=temwd+temwd; </dd>
    <dd>end; </dd>
    <dd>with strect do //定义图形在页面上的中心位置输出
    </dd>
    <dd>begin </dd>
    <dd>left:=(printer.pagewidth -temwd) div 2; </dd>
    <dd>top:=(printer.pageheight-temhi) div 2; </dd>
    <dd>right:=left+temwd; </dd>
    <dd>bottom:=top+temhi; </dd>
    <dd>end; </dd>
    <dd>with Printer do </dd>
    <dd>begin </dd>
    <dd>begindoc; </dd>
    <dd>//将放大的图形向打印机输出 </dd>
    <dd>canvas.stretchdraw(strect,image1.picture.graphic); </dd>
    <dd>enddoc; </dd>
    <dd>end; </dd>
    <dd>end; </dd>
    <dd>end; </dd>
    <dd> </dd>
    <dd>以上代码在Delphi2.0上编译通过。通过这些小例子,相信大家对于在Delphi中打印图形和文本有了一定的了解。同样通过打印机的画布(canvas)属性也可以实现数据库表单的打印
        ,在这里不一一赘述,如果大家有兴趣不妨一试。
    </dd>
</dl>
</body>
</html>

⌨️ 快捷键说明

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