说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在DELPHI 文 本 和 图 形 的 打 印

HTML文档下载 WORD文档下载 PDF文档下载
在DELPHI 文 本 和 图 形 的 打 印

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

1、 文 本 的 打 印 功 能。DELPHI 中 文 本 的 打 印 功 能 就 如 同 在DOS 中 实 现 文 本 的 打 印 功 能 一 样 容 易, 需 要 做 的 一 切 只 是 取 得 打 印 参 数, 打 开 打 印 机, 然 后 发 送 文 本 的 每 一 行 内 容。 在DELPHI 中 提 供 了 一 个PRINTERS 程 序 单 元, 它 说 明 了 一 个TPRINTER 对 象, 封 装 了WINDOWS 打 印 工 作 和 输 出 打 印 机 之 间 的 接 口, 并 提 供 常 用 的 属 性 和 方 法, 其 中 画 布CANVAS 是 一 个 非 常 有 用 的 属 性, 它 代 表 了 当 前 打 印 文 件 的 表 面, 是 以 图 形 方 式 来 工 作 的, 整 个 的 打 印 输 出 工 作 仅 仅 是 将 你 打 印 的 内 容 输 出 到TPRINTER 的 属 性CANVAS 上, 当 全 部 的 输 出 工 作 完 成 以 后, 打 印 对 象(TPRINTER) 把CANVAS 的 属 性 值 送 到 打 印 机 上 去。

下 面 举 例 来 说 明 如 何 通 过DELPHI 实 现 文 本 内 容 的 打 印。 在DELPHI 中 提 供 了PRINTDIALOG、PRINTERSETUPDIALOG 两 个 控 件 允 许 我 们 进 行 打 印 机 以 及 其 他 影 响 打 印 输 出 的 选 择, 此 外 最 重 要 的 一 点 是 要 想 实 现 打 印 功 能 必 须 在 编 译 程 序 以 前 将PRINTERS 加 入 到INTERFACE 或 者IMPLEMENTATION 的UESE 语 句 当 中, 因 为PRINTER 单 元 包 括ASSIGNPRN 和 其 他 控 制 打 印 机 的 过 程。

首 先 在FORM 当 中 加 入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG 和 两 个BUTTON 控 件, 两 个 BUTTON 的CAPTION 分 别 为“ 打 印 设 置” 和“ 打 印”。 然 后 编 写BUTTON 的 事 件 驱 动 程 序( 代 码 在 下 面), 这 个 简 单 的 例 子 中 只 要 单 击“ 打 印” 按 钮 时 便 可 以 在 打 印 机 上 输 出 文 件0S2.TXT, 打 印 事 件 的 清 单 如 下:

implementation

uses printers;

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

printersetupdialog1.execute; //选择输出的打印机以及其他打印控制选项

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

var

lines:integer;

prntext:system.text;

//将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件

begin

if printdialog1.execute then

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

rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件

printer.canvas.font:=memo1.font;

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

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

writeln(prntext

memo1.lines[lines]);

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

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

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

memo1.lines.loadfromfile('c:\dos\os2.txt');

//在FORM建立时读入C:\DOS\OS2.TXT文件

end;

end.

2、 图 形 的 打 印 功 能

简 单 的 图 形 打 印 功 能 也 如 打 印 文 本 一 样 的 容 易, 只 是 告 诉 打 印 机 对 象(TPRINTER) 开 始 打 印, 把 图 形 简 单 的 复 制 到 打 印 机 上 去, 最 后 告 诉 打 印 机 结 束 打 印 工 作。

举 例 说 明: 将 上 面 的 例 子 的MEMO 控 件 换 成IMAGE 控 件, 再 经 过 一 些 简 单 的 修 改, 图 形 打 印 的 代 码 如 下:

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

if printdialog1.execute then

begin

printer.begindoc;

printer.canvas.draw(0

0

image1.picture.graphic);

printer.enddoc;

end;

end;

在 这 种 情 况 下, 使 用 的 是 打 印 机 的 分 辨 率, 图 形 在 页 面 的 左 上 角 开 始 打 印 输 出, 打 出 的 图 形 很 小, 在 很 多 的 情 况 下 不 能 符 合 要 求, 但 是 打 印 机 画 布CANVAS 的STRETHDRAW 的 方 法, 可 以 让 我 们 对 图 形 进 行 灵 活 的 处 理, 画 布(CANVAS) 的STRETCHDRAW 方 法 声 名 为:

procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);

其中的RECT参数代表图形输出区域的大小,TRECT的类型声名为:

TRect = record

case Integer of

0: (Left

Top

Right

Bottom: Integer);

1: (TopLeft

BottomRight: TPoint);

end;

因 此 我 们 只 要 调 整RECT 的 大 小 及 其 在 打 印 页 面 上 的 位 置, 进 而 达 到 自 己 满 意 的 效 果, 下 面 的 代 码 是 不 断 的 放 大 图 形, 充 满 我 们 定 义 的 矩 形 区 域, 并 将 其 定 位 在 打 印 机 画 布(CANVAS) 的 中 央 进 行 输 出。 代 码 如 下:

procedure TForm1.Button1Click(Sender: TObject);

VAR

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

temhi

temwd:integer;

begin

if printdialog1.execute then

begin

temhi:=image1.picture.height;

temwd:=image1.picture.width;

while (temhi printer.pageheight div 2)and

//将图形放大到打印页面的1/2大小

(temwd printer.pagewidth div 2) do

begin

temhi:=temhi+temhi;

temwd:=temwd+temwd;

end;

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

begin

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

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

right:=left+temwd;

bottom:=top+temhi;

end;

with printer do

begin

begindoc;

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

canvas.stretchdraw(strect

image1.picture.graphic);

enddoc;

end;

end;

end;

以 上 代 码 在DELPHI2.0 上 编 译 通 过, 通 过 这 些 小 小 的 例 子, 相 信 大 家 对 于 在DELPHI 中 打 印 图 形 和 文 本 有 一 定 的 了 解, 同 样 通 过 打 印 机 的 画 布(CANVAS) 属 性 也 可 以 实 现 数 据 库 表 单 的 打 印, 在 这 里 不 一 一 赘 述, 如 果 大 家 有 兴 趣 不 妨 一 试。

2013 Facebook黑客杯报名即将开始 解决Win8下IE10无法打开的故障 [简讯] Scala 2.10.0发布! 收购传闻:Apple一厢情愿还是Waze待价而沽 回顾过去,展望2013:移动开发引擎、工具和语言盘点 成本为0!Netflix开源工具Janitor Monkey清理AWS iOS开发者讲述在Google工作的三个月 GitHub历史上最糟糕宕机事故回放及反省 疑因竞争 谷歌有意让地图与WP手机不兼容 移动游戏开者必看:海外VC最关心什么? 淘宝UED:随侃设计师的个人素养 TIOBE 2013年1月:不负重望 Objective-C再次赢得桂冠! 大数据:商业或技术的挑战? 开源移动统计:Cobub Razor近期版本大升级 无人机应用,为何屡遭苹果拒绝 2013年Java继续火的五大理由 Rails所有版本都有SQL注入漏洞?其实没那么严重 如何设置Windows Server 2012 NTFS权限 智能手机大局已定 HTC难扭转乾坤? 比谷歌手表更酷!基于大数据分析的睡衣 众投资金:改变了移动游戏开发的一切一切 这些科技产品和革新或在今年“横空出世”?! 现代Objective-C七宗罪 Google工程总监Ray Kurzweil意欲打造“虚拟朋友” 惠普开源JavaScript框架Enyo更新:支持桌面和移动平台 分析:三星或将成为科技行业第五巨头 是真的 诺基亚真有可能推Android手机 如何打造IE10的指尖触碰式用户体验 SUSE全球OEM联盟总监:为何SAP HANA只选择SUSE? 推荐2013年最佳PHP开发框架 Patrick Wyatt:代码没问题 程序却有bug? 自己定义CMP的finder定位器的问题 四舍五入问题 请教牛人,能不能发一段java中有关计时的程序 一个小问题,请大侠指点,立即给分!!! 关于三角函数的问题 一个三百年前已忘得一干二净的问题 打包!!!问题问题。。。在线..... 一个c的问题!! [100分求救]在Canvas或Applet上画的图应该怎样输出为jpg图象呢? 用VC的console application 到底能编多大的程序? 关于程序在初始化时候注册窗口类的问题? 上网很慢 请问从log文件里都能得到哪些信息? 系统设计一般把数据表放一个数据库中还是分到多个数据库中? 树型控件的问题,PB8.03版本,大家遇到过吗? 强烈支持雍亲王倒分!!(江湖无赖) 怎样调用VC写的DLL 同步 兄弟们,我的rh8中怎么没有中文输入法? 在access中如何用函数?我怎么找不到函数库啊。那里有关于access的函数库教程? 请教 我装的DELPHI7.0不知为何在区域设置为“英文”是看到的汉字都成了“????”? <iframe>如何改变大小? 关于水晶报表的问题!(急!!!!)(在线等待~~~~~~~~) 关于vb脚本中运用三角函数的问题 一个三百年前已忘得一干二净的问题 cbc+数据库的问题????????? 能不能控制<input type='fele' ...>的文件类型,如不可输入(readonly全部都不能用了) 在线等待:谁有个最简单的加密算法? 谁有More Effective中文电子书! 请教一段java计时器的问题(送分了) 在ASP中能不能引用.net的框架组件,能的话该怎么做? 占便宜歌 不想周末加班了,帮我啊兄弟们! 小弟是2003年毕业生,想找个软件工程师工作,不知道有什么要求? 一个简单的添加记录语句,求解! 请问通常所说的“横表”“纵表”指什么。 我想在菜单显示之前将其文字都更改掉在哪个函数中写?? 各位高手快来指点一下,是关于动态创建组件的! http://expert.csdn.net/Expert/topic/1180/1180423.xml?temp=.7148706 各位高手快来指点一下,是关于动态创建组件的! http://devserver/mail/abc.nsf?login&Username=abc&Password=12345678 如何得到已有exe文件中的菜单资源,并且添加新的item(UP无分) 在线等待:winxp professional中文版的sn? 进度条的颜色能不能换?老是灰的! 求网卡RealTek8029在Solaris8的驱动程序!!!!!! 如何提高记录的入库速度?内见例子 简单问题,容易回答,容易得分,在线等待。谢谢 高手请进,有关MVC(模型-视图-控制器)设计的讨论 客户端配置的问题? 各位高手教两招吧!! 帮我看这个汇编程序,有高分送 关于WIN2000/XP机器收发传真??? 夏天的早晨,室外的花草,树叶上常常有晶莹的小露珠,这是___现象,寒冷的冬天,清晨起床时常常看到窗户上有一层白色的冰花,这是___现象. 描写勤奋刻苦的古诗 要整首诗!免了 不要写了已经回答的事莫要重复 一灯双控开关怎么接线我想知道用这边的开关能开灯,用那边的开关能关灯,那边的开关关灯后,用这边的开关还能开灯,请问是怎么接线?《明线》我的2个开关上的字母都是L,L1,L2,知道的说下, 小露珠是怎样形成的 “我们之间,渐行渐远”英文翻译 一灯双控开关咋接. This shirt is too short .I wanta one在空的地方填词 “听见风吹像一首渐行渐远的歌”英语翻译 一灯双控开关怎么按装线路. 如何评价武则天,100字以内, 英文翻译 : 渐行渐远,直到消逝不见. 根据实物图连电路图,并说明开关在干路还是支路中 ,为什么. 急求!我需要高中期末评语100字左右 四字词语 什么的小露珠 为什么有时智能ABC输入法不能选字呢..?有时显示不出选字体那个框..什么原因..? 对生命价值的看法(100字左右)急! 英语翻译 我的智能abc输入法为什么打字只显示一个字,选字的都没有?哪个大哥大姐帮我解决下 1 哲学与文化的关系是什么?请写的详细点 英语翻译 胡修齐,起英文名.必须要有谐音的,既有谐音又有意义那最好不过了.我自己研究了几个:Hughie ; Huxley ; Yuchi ; hoochie;juche; chalky……反正都是这一类的这几个里哪个更好? 如何理解四个文明的关系? 小露珠历险记作文 含有好看意思的词语有什么 八上, 英语翻译 含有“好看”意思的词语有:含有“好看”意思的词语有那些? 百万亚瑟王,3星4星卡有什么用? 怎么判断电路图中的干路? What's that的复数形式 文明跟文化有什么区别? 小露珠有什么作用 电路图以及连接实物图的支路和干路怎么找 指出下面加点词语在文中的含义.她满不在乎地说:"算了吧,反正我已经站了一个钟头,要是再换回来,你还得站两个钟头 小露珠是怎么形成的?怎样变成的? 小露珠像什么 This is a black and grey shirt将这句话变成复数形式 “公园里有许多人,男男女女,老老少少.”用英语怎么说 什么是小露珠?露珠可以被叫做水珠吗? 武则天创造了多少个汉字? 老少爷儿们用英语怎么说? 不用双控开关,一灯双控怎么接?听别人说是用三根线接的?具体怎么接? 武则天创造的十二个汉字 先生们,女士们,老少爷们们,用英语怎么说? 求"两开关控一灯"的电路图? 简述汉语汉字和中国文化之间的关系 老的英语怎么说? 并联电路中的支路和干路是什么意思啊 简述文化与经济、政治的关系 最坏的结局是什么---【】括号中填四字成语【趣味题】 物理干路是什么意思 简述经济.文化三者的关系 文化与文明的联系 干路先行的干路什么意思 简述文明产生于自然环境的关系 在括号里填上两个意思相近的字,组成成语( )马( )花 嬲 这字念哈 拼音 论述设计与中国文化的关系 小露珠什么意思 请问这个嬲字的拼音?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘