打印内容如何定位!(150分)

  • 主题发起人 主题发起人 yxshi
  • 开始时间 开始时间
Y

yxshi

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做一个动态报表
要打印的字段从Register中读取,但位置信息是实际纸张上的毫米
我如何控制打印机,在不同打印机上,在相同的位置打出要求的字段
好象涉及到分辨率,我第一次做打印程序,这个愚蠢的问题请多指教
请最好给我详细的代码段,分数不少150
 
用什么控件?QReport吗?
 
有两种方案
1.在Printer.Canvas中画
2.用QuickRep
我基本上倾向于用1方案
 
仔细看看Win32程序员参考大全中关于坐标变换部分的内容。
 
仔细看看Win32程序员参考大全中关于坐标变换部分的内容,当然有困难!!
 
最好自个在打印机上画,从全局变量Printer中取出当前打印机的分辨率,
用WINDOWS的API函数CreateFontXXX动态创建相适应的逻辑字体,再进行打印。
否则在屏幕上正常显示的报表,用激光打印出来就跟我现在吃的锅巴片一样大了,
嘎巴,好脆!
要源码?有耐心吗?有人逼我做一套超级报表系统,还没开工,等三个月吧?
不过还是先自己琢磨,几天就搞定了吗。
 
我试了一些方法,发现我写canvas.font.size:=5,与在word中同样的字体
size=5打出来的字体不一样.我设了setmapmode为0.1mm为单位,这与分辨率有关吗
 
与word中的单位(磅)不同,当然不一样.
 
menxin说的有道理,请研究一下TLogFont 数据结构,你会发现windows的字体
定义原来也很自由,
 
通过PRINTER变量获得GETCAP系统的打印分辨率,纸张大小
根据你的设置的位置调整。字体也是这样
 
屏幕分辨率一般是96dpi,打印机分辨率通常是300dpi以上(各种打印机不同)。所以
解决问题的思路和Sherman的办法差不多。不过通过TPrinter对象得到的打印机信息
有以下问题(在Delphi4.0中):
1、Printer.Font.PixelsPerInch永远是96。
2、对某一种打印机,Printer.PageWidth、Printer.PageHeight永远是固定值,无
论是否改变其纸张大小。
3、无法获取分辨率的信息。
恐怕要用Api函数来获取有关信息,但是我还没有找到解决的办法;不知道哪位大虾有
什么高招儿,讲来听听。
 
用quickreport吧, 与打印机好象无关:-)
 
我也建议你直接在打印机上画,通过从Printer中得到的参数及动态报表的尺寸确定打印位置.这种方法工作量不是很大,而且效果好.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
877
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部