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

📄 007.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-外设应用-->Delphi文本和图形的打印</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-外设应用 Delphi文本和图形的打印">
<META NAME="description" CONTENT=" - DELPHI专题文档-外设应用 - Delphi文本和图形的打印">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index7.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">Delphi文本和图形的打印</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p class="tt2"> 对于每一个Windows应用程序开发者来说,打印功能的实现都是极为棘手的,因为要涉及到相当多的代码,而且常常是相当复杂,但是在Delphi中实现文本和图像的打印功能却是非常容易的。
<br>
<br>
<strong>文本的打印功能 </strong><br>
<strong>&nbsp;&nbsp;&nbsp; </strong>Delphi中文本的打印功能就如同在DOS中一样容易,需要做的只是取得打印参数,打开打印机,然后发送文本的每一行内容。在Delphi中提供了一个printers程序单元,它说明了一个tprinter对象,封装了Windows打印工作和输出打印机之间的接口,并提供常用的属性和方法。其中画布canvas是一个非常有用的属性,它代表了当前打印文件的表面,是以图形方式来工作的,整个打印输出工作仅仅是将打印的内容输出到tprinter的属性canvas上,当全部输出工作完成以后,打印对象(tprinter)把canvas的属性值送到打印机上去。
<br>
&nbsp;&nbsp;&nbsp;&nbsp; 下面举例来说明如何通过Delphi实现文本内容的打印。在Delphi中提供了printdialog 
、printersetupdialog两个控件允许我们进行打印机以及其他影响打印输出的选择,此外最重要的一点是要想实现打印功能必须在编译程序以前将printers加入到interface或者impl 
ementation的UESE语句当中,因为printer单元包括assignprn和其他控制打印机的过程。 
<br> 
&nbsp;&nbsp;&nbsp; 首先在From当中加入memo、printdialog、printersetupdialog和两个BUTTON控件,两个 
BUTTON的CAPTION分别为&quot;打印设置&quot;和&quot;打印&quot;。然后编写BUTTON的事件驱动程序。本例比较简单,只要单击&quot;打印&quot;按钮时便可以在打印机上输出文件0S2.TXT。代码如下: 
<br> 
<br> 
implementation <br> 
uses printers; <br> 
{$R *.DFM} <br> 
procedure TForm1.BitBtn1Click(Sender: TObject); <br> 
begin <br> 
printersetupdialog1.execute; <br> 
//选择输出的打印机以及其他打印控制选项 <br> 
end; <br> 
<br> 
procedure TForm1.BitBtn2Click(Sender: TObject); <br> 
var <br> 
lines:integer; <br> 
prntext:system.text; <br> 
//将PRNTEXT声明为一个在SYSTEM程序单元当中定义的文本文件 <br> 
begin <br> 
if printdialog1.execute then <br> 
assignprn(prntext); //将PRNTEST分配给打印机 <br> 
rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件 <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> 
<br> 
procedure TForm1.FormCreate(Sender: TObject); <br> 
begin <br> 
memo1.lines.loadfromfile(‘c:\dos\os2.txt’); <br> 
//在FORM建立时读入C:\DOS\S2.TXT文件 <br> 
end; <br> 
end. <br> 
<br> 
<strong>图形的打印功能 </strong><br> 
<strong>&nbsp;&nbsp;&nbsp; </strong>简单的图形打印功能也如打印文本一样容易,只是告诉打印机对象(tprinter)开始打印 
,把图形复制到打印机上去,最后告诉打印机结束打印工作。 <br> 
&nbsp;&nbsp;&nbsp; 举例说明:将上面的例子中的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> 
<br> 
&nbsp;&nbsp;&nbsp; 在这种情况下,使用的是打印机的分辨率,图形在页面的左上角开始打印输出,打出的图形很小,通常不能符合要求。但是利用打印机画布canvas的stretchdraw方法,我们可以对图形进行灵活处理,canvas的stretchdraw方法声明为: 
<br> 
<br> 
procedure StretchDraw(const Rect: TRect; Graphic: TGraphic); <br> 
<br> 
&nbsp;&nbsp;&nbsp; 其中的Rect参数代表图形输出区域的大小,Trect的类型声明为: 
<br> 
<br> 
TRect = record <br> 
case Integer of&nbsp; <br> 
0: (Left, Top, Right, Bottom: Integer); <br> 
1: (TopLeft, BottomRight: TPoint);<br> 
end; <br> 
<br> 
&nbsp;&nbsp;&nbsp; 因此我们只要调整RECT的大小及其在打印页面上的位置,进而达到满意的效果,下面不断放大图形,充满我们定义的矩形区域,并将其定位在打印机画布(canvas)的中央然后输出。代码如下: 
<br> 
<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 //将图形放大到打印页面的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> 
begindoc; //将放大的图形向打印机输出 <br> 
canvas.stretchdraw(strect,image1.picture.graphic);<br> 
enddoc; <br> 
end; <br> 
end; <br> 
end; <br> 
<br> 
&nbsp;&nbsp;&nbsp; 以上代码在Delphi2.0上编译通过。通过这些小例子,相信大家对于在Delphi中打印图形和文本有了一定的了解。同样通过打印机的画布(canvas)属性也可以实现数据库表单的打印 
,在这里不一一赘述,如果大家有兴趣不妨一试。 </p> 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

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