使用QUICKREPORT 控件进行打印时,有关自定义纸张的最终解决方案(0分)

Z

zzh0918

Unregistered / Unconfirmed
GUEST, unregistred user!
使用delphi 提供的quickreport 控件进行打印时,对于自定义纸张的走纸问题始终没有得到解决
这个问题在最近本人也遇到。通过对quickrep 源程序进行分析和跟踪。发现导致不能正确走纸的
主要原因在于qrprntr.pas程序中第2073行开始的以下程序段。该段程序是实现自定义纸张的。在
windows 2000下 自定义纸张需要将DevMode中的字段dm_papersize的值设为0。另外通过跟踪发现
Supported(dm_paperlength),Supported(dm_PaperWidth)的值始终为假。也就是说,设置自定义
纸张长度的语句 DevMode^.dmPaperLength := PaperLength;和设置纸张宽度的语句
DevMode^.dmPaperWidth := PaperWidth;没有执行。这就是不能正确走纸的根本原因。只需将如下
语句
if PaperSize = Custom then
begin
if Supported(dm_paperlength) then
begin
SetField(dm_paperlength);
DevMode^.dmPaperLength := PaperLength;
end;
if Supported(dm_PaperWidth) then
begin
SetField(dm_paperwidth);
DevMode^.dmPaperWidth := PaperWidth;
end
end;

改为
if PaperSize = Custom then
begin
SetField(dm_papersize);
DevMode^.dmPapersize := 0;
// if Supported(dm_paperlength) then
不作判断
begin
SetField(dm_paperlength);
DevMode^.dmPaperLength := PaperLength;
end;
// if Supported(dm_PaperWidth) then
不作判断
begin
SetField(dm_paperwidth);
DevMode^.dmPaperWidth := PaperWidth;
end
end;
然后将该程序对应的dcu 删除,将qrprntr重新编译成dcu 即可。
注意:如果编译时提示qr版本问题,请删除所有qr*.dcu 然后重新编译。
赶快享受吧!!!!!!!!!!
 
这样单纯的删除恐怕有问题吧?
Supported(dm_paperlength) 是什么?为什么在有的打印机上还可以?
不过你提供的思路与实现很好,似乎距离彻底解决还差一点点。。。
谢谢你将技巧共享![:)]
 
DevMode^.dmPaperLength使用为0,如果是你在2000下创建了自定义纸张(在控制面板的打印机属性里面),结果如何?
记得以前在Delphibbs上看过一篇E文的来自msdn的文章,里面讲述了如何在2000下使用自定义纸张的问题。
按照那个的说法是如果你使用程序建立了自定义纸张或者通过控制面板建立自定义纸张,就可以打印了。
还有,quickreport在98下面打印有的时候也会出现单纯走纸一点点,什么都不打印的情况,不知道是否和这个有关?
 
我试一下先!
 
还是装装quickreport3.6以上版本吧,问题好象解决了。
 
to yzhshi:
只有在一种情况下才会出问题,就是你将纸张设置为超过打印机允许的程度。
在自己的程序中也可以使用api addform 来添加自定义纸张。但他和这个无关。通过addfrom
添加的自定义在打印服务器中有固定名字和自己的排列位置。而quickreport中的自定义纸张
固定使用位置为255得纸张类型.除非你自定义的纸张类型特别多.否则不应该会有影响.
quickrep 3.6也没有解决。
 
我也遇到这样的问题,我制作的quickrep设置为自定义纸张,结果打印时要么报错,要么只走一
点点纸;后来我找到一个办法解决这个问题,就是在WIN下将打印机属性中的纸张大小也设置成
自定义,打印就恢复正常了.
可惜很快就发现,似乎这方法只适用于98,不适用2000,zzh0918推荐的方法我想试一下,最好能管用.
 
我没有windows 98 环境,是否有人测试过,在98上是否没有问题?
 
可以在打印机里控制吗?我是用华表做的,以前的华表控件没有连续打印这个功能。
我只是想实现打印完一页不走纸。
 
谁能给我提供quickreport 的源程序?谢谢!ldlcm@163.com
 
顶部