打印预览出错(300分)

E

ecc

Unregistered / Unconfirmed
GUEST, unregistred user!
专家们好:
小生目前在用delphi5.0中的qreport做一个打印报表程序,是
以动态连接的方式为主程序提供报表打印函数.打印的内容均是从
sqlserver数据库中获得。
一共是8张报表,5张纵向,3张横向。因为客观原因我不能将打印
纸张设为固定,因此我在程序中设定纸张大小为‘default’,这样
程序在打印是将按照当前打印机默认纸张大小打印。在5张纵打的报表中
没有任何问题,但3张横向打会预览时出现
如下错误:
Project testdll.exe raised exception class EZeroDivide with
message 'Floating point division by zero'. Process stopped........
但如果给横打的报表设定固定的纸张大小,如A4,B5等等均没有问题!
在delphi环境下用qreport本身的预览也是这样。一换'default'纸张
大小就会出错。在预览窗口内有时是一片灰什么都没有,有时中间有一个
小点。
我用的qreport是qreport3.05 for delphi5,比delphi5本身带的
qreport 多若干控件。如LoopBand等等。横打的报表中均使用了此
控件。但我不认为这个问题与该控件有关。
请各位大侠帮助,找出问题的所在。或者想办法绕开此问题也行。
本人不胜感激,多谢了!



 
1、请检查
property Orientation : TPrinterOrientation
设了没有?
2、请设page.pagesize设为“custom”试试看.

上面两种分开试一下,相信没有问题了。
 
maming 你好!
1.property Orientation 我以设为横打(即 poLandscape)。
2.设为"custom"之后没有问题,但不符合我的需求。
我是要能按照用户机器本身的默认纸张大小打印。
其实我要是能在程序中得到当前系统默认纸张大小也就可以解决了.
你能告诉我相应的api函数的用法说明吗?多谢了.
 
GetDeviceCaps
 
或则假如Uses Printers.

Printer.PageHeight,Printer.PageWidth就是当前系统默认纸张大小
 
沈前卫:
你好。
GetDeviceCaps 怎么用呢?能否介绍详细一些。
目前我用的是Qreport是不是一样的?
 
Printer.PageHeight,Printer.PageWidth只是象素大小。
请问printer能不能得到纸张毫米大小?
用户的打印机有针打、喷墨、激光的各种品牌,所以分辨率不尽相同。
 
是不是要用这个DeviceCapabilities。我不太清楚。
 
GetDeviceCaps(Printer.Handle,HORZSIZE)为打印机默认纸张的宽度(毫米)
GetDeviceCaps(Printer.Handle,HORZRES)为打印机默认纸张的宽度(象素点)
 
请问有没有直接取得打印机分辨率的办法?
还有对于我上面出的问题是什么原因呢?
 
我也想知道
 
还没有人发现问题出现的原因吗?
 
看来也不会有什么新的观点了,那就...分赃。
多谢几位了。
 
对不起,忘了给大家加分了,对不起.呵呵
 
多人接受答案了。
 
顶部