谁能解释一下QReport里的打印设置是怎么回事???(200分)

  • 主题发起人 主题发起人 mor
  • 开始时间 开始时间
M

mor

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在程序里控制打印的输出方向时,一般是设TPrinter.PrinterIndex,然后我在运行时
发现
QuickRep1.PrinterSettings.PrinterIndex的值为-1
QuickRep1.Printer.PrinterIndex的值为1(1是我想要的结果)
我做了许多测试的程序,发现对针打的控制(走纸等等)总是不理想.
然后我看了一下QReport的原码,发现QReport里定义了两个对象TQRPrintSettings和
TPrintSettings,前一个就是TQuickRep的published property,而后一个用在TQRPrinter
里,是private,这里面就有一个DEV_MODE的对象,可以控制打印.每个TQuickRep都应该
有一个TQRPrinter对象(?),但我不知道如何设置它,TQRPrinter初始化的时候会把
TPrinter类里的DEVMODE读进来,但我们知道TPrinter类里的DEVMODE只有一个,就是默认打
印机的设置,所以当我要在程序里改动打印的输出方向和各个打印机的打印参数时,就会发
生问题.
有没有谁仔细研究过QReport的代码(里面的东西可不少),请指教一下如何在QReport里改动
打印机的设置,(好像不同版本的QReport还有所不同,我用的是Delphi自带的那个)
 
把我遇到的问题详细说一下,开始我为了控制多个打印机(纸张类型,横打竖打之类),
用的方法是用API取得某个打印机的DEV_MODE,然后改动DM_PAPERSIZE等字段。然后改动
TPrinter类的PrinterIndex的值,在用QReport或者FR来打印报表、单据等等。经调试成
功。
但后来我有对系统作了一些改动,在编译后就发现以前的方法不灵了,faint,因为我后来
装了Qr351,真是麻烦。[:(]
 
我又看了一下TPrinter类,发现它的GetPrinter返回的DEVMODE的handle是它的私有变量
DeviceMode(THandle).当初始化的时候读入的是默认打印机的设备状态,而当调用
SetPrinter时会更改这个Handle,QReport应该也是调用这个东东,那么每次更换打印机后,
都作一次SetPrinter不知有没有用,我去试试看.
 
[B)]看看这个
Q. When I change the printerindex, I can't select the right paper size.
A. There is a problem in the printers unit where when the printerindex
index is changed, the new printer "inherits" the properties of the previous
printer. With the 2.0j release, we now reset the printer driver when the
printerindex is changed.
大家有什么意见吗?
 
[:(!]
问题越来越复杂了。
我用DevMode改动打印机的纸张设置,然后直接用Printer.Canvas.TextOut输出一段字符串,
达到了我要的效果,前后两次打出的字符串相距153mm。
而我再用QReport来打印,却发现两次打印的距离是212mm,这个值是哪里来的呢?
我单步进QReport的print过程里去,并没有找到问题,TQRPrint的设置没有问题,至少没有
212mm之类的数值。
[:(]
 
[;)]
200分赠送,第一个100,第二三各50
 
你对问题的研究远远超出了我的应用范围,呵呵
我只能做个观众,不好意思
 
总算可以结了
 
后退
顶部