转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
在DELPHI 文 本 和 图 形 的 打 印         ★★★★

在DELPHI 文 本 和 图 形 的 打 印

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1152 更新时间:2009/4/23 18:42:13

在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;  file://选择输出的打印机以及其他打印控制选项

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

var

lines:integer;

prntext:system.text;

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

begin

   if printdialog1.execute then

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

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

   printer.canvas.font:=memo1.font;

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

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

   writeln(prntext,memo1.lines[lines]);

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

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

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

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

file://在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;    file://定义打印输出矩形框的大小

temhi,temwd:integer;

begin

if printdialog1.execute then

   begin

   temhi:=image1.picture.height;

   temwd:=image1.picture.width;

      while (temhi printer.pageheight div 2)and

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

         (temwd printer.pagewidth div 2)   do

              begin

              temhi:=temhi+temhi;

              temwd:=temwd+temwd;

              end;

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

              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); 

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

   enddoc;

   end;

end;

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


[办公软件]RIGHT函数和逻辑与&和Value函数在Excel中的应用举…  [电脑技术]使用?和*两个通配符迅速批量(搜索)查找文件
[VB.NET程序]获 得 位 图 文 件 的 信 息  [VB.NET程序]VB中的Unicode 和 Ansi 格式
[VB.NET程序]****关于 OLE DB 和 .NET 的思考 (强烈推荐)****  [VB.NET程序]在 VB 中 引 用 .dbf 及 索 引 文 件
[Delphi程序]李维看 .net 和  DELPHI 6 (含李维照片)  [Delphi程序]在Delphi 中用程序实现自定义窗体的创建和显示顺序…
[Delphi程序]在Delphi 中用程序实现自定义窗体的创建和显示顺序…  [Delphi程序]String 和 VariantArray
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台