设为首页 - 加入收藏 - 联系我们 - 广告合作 QQ 技术群1:29388706 群2:6069689(每月清理潜水用户)┆繁體中文
  PC外设之家
 首 页  文章中心 下载中心 经销商 用户交流 新版测试 网上商城
 打印文章: 导购指南 | 专业评测 | 产品资料 | 基础知识 | 办公耗材 | 应用技巧 | 解决方案 | 连续供墨 | 维护保养 | 维修技术
 资源下载: 打印机驱动 | 一体机驱动 | 专业打印驱动 | 打印机手册 | 一体机手册 | 专业打印手册 | 固件升级 | 打印管理 | 维修软件
 
 
   
   
 
您当前的位置:办公打印之家 -> 应用技巧 -> 文章内容  
高级查找
 
深度技巧!在DELPHI中实现打印的预览
作者:佚名  来源:办公打印之家整理  发布时间:2008-1-2 20:22:38  发布人:admin

减小字体 增大字体

    在很多应用程序中,都需要程序具有打印预览功能,以避免用户由于选择不当出现打印错误。预览实现方式为通过创建一个Tpanel的派生类并公开它的canvas属性比例尺或视区范围,使用较为不方便,笔者通过实践实现了用图元文件(Metafile)来实现打印预览的方法,这种方式不需要调整比例尺和视区范围。

基本原理和方法:

  图元文件也称作"绘图类型"的图形,是以图形对象(线、圆弧、多边形)方式而不是像素方式来储存图像。图元文件将图形定义为编码的确线段和图形。Windows系统下有两种类型的图元文件:标准型(WMF文件格式)和增强型(EMF文件格式)。

  使用图元文件的好处在于它能够任意大小缩放并且任能保持一定的逼真度,这是因为图元文件通常由一系列矢量图形的图元组成,图元是指线条、填充的区域以及轮廓字体等。扩大或缩小图像只是简单地缩放定义这些图元的所有坐标点,所以当调整图像大小时,图元文件对图像的保存比像素更精确,效果更好。

  Delphi以Tmetafile对象对 Win32增强型图元文件进行了封装,通过设置Enhanced属性可以设定图元文件是以标准型或可增强型格式存储。
在Delphi中使用图元文件的基本方法是:

   创建图元文件
   使用参照设备的打印机句柄创建图元文件画布对象(Tmetafilecanvas)
   如同在打印机画布上一样,在图元文件画布进行描
   将图元文件在屏幕上显示出来

实现步骤:

  首先建立一个窗体文件,在适当位置放上一个panel控件 (panel),一个checkbok控件(chedkbox1),并设定checkbox的 caption为"打印预览",在panel上放置一个image控件(image), 并设image的align属性为kckient.

   在USES中添加打印程序单元(Printers),尽管Delphi在生成窗体时会自动在USESB部分加入许多程序单元,但打印程序单元却不在此列,只能手工给它加上。

   关键代码说明:用GetDevice (Printer.Handle,LOGPIXESX)获取当前打印机的水平分辨率。

    如果想让打印程序在任何打印机上都能正常的打印,你就必须改变你的度量单位。

Dpm:=trunc(dpi/25.4);
//算出每毫米的打印机点数。
MyMetafile :=Tmetafile.Create;
//创建图元文件
TmetafileCanvas.Create (MyMetafile,printer.Handle)
//以打印机句柄创建图元文件画布
textout(trunc(sx*dpm), trunc(sy*dpm),'我的打印');//进行打印输入
imagel.Camvas.StretchDraw (imagel.canvas.cliprect, MyMetafile);
//显示图元文件

程序源代码:
unit u_print;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Controls,Fr-ms,Dialogs,
StdCtr;d,Buttons,printers,ExtCtrls;
Type
TF_prin = class(Tform)
………
private
{Private declarations}
public
{Public declarations}
end;
var
F_print: TF_print;
Implementation
{$R*.DFM}
procedure TF_print.BitBtn1Click(Sender:Tobject);
brgin
close;
end;
//定义report过程,使真实打印和打印愈来愈览共用此过程
procedure TF_print.report (Acanvas:Tcanvas);
var
sx,sy,sy0,sx0:real;//开始位置
dpi,dpm:real; //每毫米的点数
Arect: Trect;
Begin
Dpi: =GetDeviceCaps (Printer.Handle,LogPixelsX);
Dpm:=trunc(dpi/25.4); //每毫米的点数
Sx:=100; sx0:=10; sy0:=10 sy:=sy0;
with Acanvas do
try
font.name:='宋体';
font.size:=18;
textout(trunc (60*dpm),trunc (sy*dpm),'姓名');
sy:=sy+10;
pen.Width:=5;
MoveTo(trunc(sx0*dpm),trunc(sy*spm));
LineTo(trunc((sX0+200)*dpm),trunc(sy*dpm));
font.size:=12;
sy::=sy+5;
textout(trunc(sx0*dpm),trunc(ay*dpm),'内容');
sy:=sy+5
MoveTo(trunc(sx0*dpm),trunc(sy*dpm));
LineTo(trunc((sX0+200)*dpm),trunc(sy*dpm));
finally
Free;
End;
End;
Procedure TF_print,BitBtn2Click(Sender:Tobject);
Var mymetafile:Tmetafile;
Ifprt:Boolean;
Begin
Ifprt:=not checkbok1.checked;
//是false则打印预览,true则打印if ifprt then
begin
printer.BeginDoc;
report(printer.canvas);
//将打印机画布对象传给report过程
end
else
begin
MyMetafile: =Tmetafile.Create
//创建图元文件
//以打印机句柄创建图元文件画布对象(Tmetafilecanvas),并调用report过程
report (TmetagileCanvas.Create(MyMetafile,
printer.Handle));
end;
//如果是打印则结束打印
if ifprt then printer.enddoc;
//如果是打印预览,则在image1上显示出来
if not ifprt then image1.Canvas.StretchDraw (image1.canvas.cliprect,MyMetafile);
end;
end.
以上代码在Windows 98\Delphi 5.0下调试通过。
[ ] [返回上一页] [打 印] [收 藏]
上一篇文章:
下一篇文章:
      给打印机办个“月票”连供墨水安装法       你真的了解它吗?详解墨水的两种分类
发表评论:
用户名
分 值 100分 85分 70分 55分 40分 25分 10分 0分
说 明
  (注“”为必填内容。)
 
 
栏目导航
· 导购指南 · 专业评测
· 产品资料 · 基础知识
· 办公耗材 · 应用技巧
· 解决方案 · 连续供墨
· 维护保养 · 维修技术
热门下载
热门文章
· 挖掘HP3325喷墨打印机的潜..
· HP LaserJet 5000LE打印机..
· Star AR3200打印歪斜的校正..
· 跟我学寸照排版打印 十步搞..
· HP 2605系列打印机如何安装..
· 解决Epson LQ-570+指示灯不..
· 几款虚拟打印机的奇妙用途..
· HP惠普 专用网络打印服务器..
· 数码照片打印前的快捷曲线..
· 数码照片打印前 Photoshop..
· 数码照片打印前的魔术处理..
· 教您安装HP激光打印机硒鼓..
· 安装EPSON针式打印机要用操..
· 佳能LBP-660、LBP-800激打..
· HP 1125c打印机为何如此慢..
· 教你 HP LaserJet1022打印..
· 如何安装及更换打印机色带..
· 减少EPSON LQ-1600K打印机..
· 虚拟打印机使用手册
· 高效完成工作的助手:一体..
相关文章
· [图文] 潜力之作!Ca..
· [图文] 视觉盛宴!佳..
· 成本应该这么算!墨..
· [图文] 深度分析 是谁..
查看更多与深度技巧!在DELPHI中实现打印的预览相关内容
 
 
Copyright © 2002-2008 办公打印之家. All Rights Reserved .
湘ICP备06012912号
 
在线客服: 点击这里给我发消息
点击这里给我发消息
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 -网站地图