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

📄 162.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="7.htm">上一层</a>][<a href="163.htm">下一篇</a>]
<hr><p align="left"><small>发信人: pitts (痛并快乐着), 信区: Delphi <br>

标  题: Delphi文本和图形的打印 <br>

发信站: BBS 水木清华站 (Tue Oct 13 10:32:54 1998) WWW-POST <br>

  <br>

Delphi文本和图形的打印 <br>

  <br>

李旭东 <br>

  <br>

对于每一个Windows应用程序开发者来说,打印功能的实现都 <br>

是极为棘手的,因为要涉及到相当多的代码,而且常常是相当复 <br>

杂,但是在Delphi中实现文本和图像的打印功能却是非常容易 <br>

的。 <br>

  <br>

文本的打印功能 <br>

  <br>

  <br>

  <br>

  <br>

Delphi中文本的打印功能就如同在DOS中一样容易,需要做的 <br>

只是取得打印参数,打开打印机,然后发送文本的每一行内容。 <br>

在Delphi中提供了一个printers程序单元,它说明了一个 <br>

tprinter对象,封装了Windows打印工作和输出打印机之间的 <br>

接口,并提供常用的属性和方法。其中画布canvas是一个非常 <br>



有用的属性,它代表了当前打印文件的表面,是以图形方式来工 <br>

作的,整个打印输出工作仅仅是将打印的内容输出到tprinter <br>

的属性canvas上,当全部输出工作完成以后,打印对象 <br>

(tprinter)把canvas的属性值送到打印机上去。 <br>

下面举例来说明如何通过Delphi实现文本内容的打印。在 <br>

Delphi中提供了printdialog 、printersetupdialog两个控 <br>

件允许我们进行打印机以及其他影响打印输出的选择,此外最 <br>

重要的一点是要想实现打印功能必须在编译程序以前将 <br>

printers加入到interface或者impl ementation的UESE语 <br>

句当中,因为printer单元包括assignprn和其他控制打印机 <br>

的过程。 <br>

首先在From当中加入memo、printdialog、printersetupdialog <br>

和两个BUTTON控件,两个 BUTTON的CAPTION分别为"打印设置 <br>

"和"打印"。然后编写BUTTON的事件驱动程序。本例比较简单, <br>

只要单击"打印"按钮时便可以在打印机上输出文件0S2.TXT。 <br>

代码如下: <br>

implementation <br>

uses printers; <br>

{$R *.DFM} <br>

procedure TForm1.BitBtn1Click(Sender: TObject); <br>

begin <br>

printersetupdialog1.execute; <br>

printersetupdialog1.execute; <br>

//选择输出的打印机以及其他打印控制选项 <br>

end; <br>

procedure TForm1.BitBtn2Click(Sender: TObject); <br>

var <br>

lines:integer; <br>

prntext:system.text; <br>

//将PRNTEXT声明为一个在SYSTEM程序单元当中定义的文本 <br>

文件 <br>

begin <br>

if printdialog1.execute then <br>

assignprn(prntext); //将PRNTEST分配给打印机 <br>

rewrite(prntext); //调用REWRITE函数,为输出打开已分配 <br>

的文件 <br>

printer.canvas.font:=memo1.font; <br>

//把当前MEMO1的字体指定给打印对象的CANVAS的字体属性 <br>

for lines:=0 to memo1.lines.count-1 do <br>

writeln(prntext,memo1.lines[lines]); <br>

//把MEMO的内容写到打印机对象 <br>

system.close(prntext); //关闭打印文件 <br>

end; <br>

procedure TForm1.FormCreate(Sender: TObject); <br>

begin <br>

begin <br>

memo1.lines.loadfromfile(‘c:\dos\os2.txt’); <br>

//在FORM建立时读入C:\DOS\S2.TXT文件 <br>

end; <br>

end. <br>

  <br>

  <br>

图形的打印功能 <br>

  <br>

  <br>

简单的图形打印功能也如打印文本一样容易,只是告诉打印机 <br>

对象(tprinter)开始打印 ,把图形复制到打印机上去,最后告 <br>

诉打印机结束打印工作。 <br>

举例说明:将上面的例子中的memo控件换成image控件,再经 <br>

过一些简单修改,图形打印的代码如下: <br>

procedure TForm1.BitBtn1Click(Sender: TObject); <br>

begin <br>

if printdialog1.execute then <br>

begin <br>

printer.begindoc; <br>

printer.canvas.draw(0,0,image1.picture.graphic); <br>

printer.enddoc; <br>

end; <br>

end; <br>

end; <br>

  <br>

在这种情况下,使用的是打印机的分辨率,图形在页面的左上角 <br>

开始打印输出,打出的图形很小,通常不能符合要求。但是利用 <br>

打印机画布canvas的stretchdraw方法,我们可以对图形进行 <br>

灵活处理,canvas的stretchdraw方法声明为: <br>

procedure StretchDraw(const Rect: TRect; Graphic: <br>

TGraphic); <br>

  <br>

其中的Rect参数代表图形输出区域的大小,Trect的类型声明 <br>

为: <br>

TRect = record <br>

case Integer of <br>

0: (Left, Top, Right, Bottom: Integer); <br>

1: (TopLeft, BottomRight: TPoint);end; <br>

  <br>

因此我们只要调整RECT的大小及其在打印页面上的位置,进而 <br>

达到满意的效果,下面不断放大图形,充满我们定义的矩形区域, <br>

并将其定位在打印机画布(canvas)的中央然后输出。代码如下: <br>

procedure TForm1.Button1Click(Sender: TObject); <br>

VAR <br>

strect:Trect; //定义打印输出矩形框的大小 <br>



temhi,temwd:integer; <br>

begin <br>

if printdialog1.execute then <br>

begin <br>

temhi:=image1.picture.height; <br>

temwd:=image1.picture.width; <br>

while (temhi<printer.pageheight div 2)and //将图形放 <br>

大到打印页面的1/2 <br>

(temwd<printer.pagewidth div 2) do <br>

begin <br>

temhi:=temhi+temhi; <br>

temwd:=temwd+temwd; <br>

end; <br>

with strect do //定义图形在页面上的中心位置输出 <br>

begin <br>

left:=(printer.pagewidth -temwd) div 2; <br>

top:=(printer.pageheight-temhi) div 2; <br>

right:=left+temwd; <br>

bottom:=top+temhi; <br>

end; <br>

with Printer do <br>

begin <br>



end; <br>

with Printer do <br>

begin <br>

begindoc; <br>

//将放大的图形向打印机输出 <br>

canvas.stretchdraw(strect,image1.picture.graphic); <br>

enddoc; <br>

end; <br>

end; <br>

end; <br>

  <br>

以上代码在Delphi2.0上编译通过。通过这些小例子,相信大 <br>

家对于在Delphi中打印图形和文本有了一定的了解。同样通 <br>

过打印机的画布(canvas)属性也可以实现数据库表单的打印 , <br>

在这里不一一赘述,如果大家有兴趣不妨一试。 <br>

  <br>

  <br>

-- <br>

  <br>

  怎一个惨字了得 <br>

  <br>

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

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="7.htm">上一层</a>][<a href="163.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 + -