需求:打印190*93mm尺寸的报表, 用QuickRep开发。
问题:在WIN98下,把打印机默认纸张设成自定义,打印及走纸都正常;但是在WIN2000或XP下面,在控制面板->打印机->创建新格式中也设置了与QuickRep相同的纸张大小,但是打印时总是以A4幅面打印? 请问有什么解决方法?附代码:
__________________________________________________________________________
var
Device: array[0..cchDeviceName-1] of Char;
Driver: array[0..(MAX_PATH-1)] of Char;
Port: array[0..32]of Char;
hDMode: THandle;
pDMode: PDevMode;
strSQL: String;
begin
try
Printer.GetPrinter(Device,Driver,Port,hDMode);
// 获取打印机DevMode 结构的句柄值,存放在hDMode 中
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
// 获取指向打印机DevMode 结构的指针
if pDMode <> nil then
begin
pDMode^.dmPaperSize := 256;
// 如果要将当前打印机纸张变为自定义 dmPaperSize 必须设置成256
pDMode^.dmPaperLength := 1900;
pDMode^.dmPaperWidth := 930;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH;
//以上三条语句是对相应的dmFields 成员进行置位。
ResetDC(Printer.Handle,pDMode^);
// 设置打印机设备环境句柄的值
GlobalUnlock(hDMode);
end;
end;
except
MessageBox(Self.Handle,'设置打印机错误!','系统提示',MB_OK+MB_ICONWARNING);
Exit;
end;
end;
问题:在WIN98下,把打印机默认纸张设成自定义,打印及走纸都正常;但是在WIN2000或XP下面,在控制面板->打印机->创建新格式中也设置了与QuickRep相同的纸张大小,但是打印时总是以A4幅面打印? 请问有什么解决方法?附代码:
__________________________________________________________________________
var
Device: array[0..cchDeviceName-1] of Char;
Driver: array[0..(MAX_PATH-1)] of Char;
Port: array[0..32]of Char;
hDMode: THandle;
pDMode: PDevMode;
strSQL: String;
begin
try
Printer.GetPrinter(Device,Driver,Port,hDMode);
// 获取打印机DevMode 结构的句柄值,存放在hDMode 中
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
// 获取指向打印机DevMode 结构的指针
if pDMode <> nil then
begin
pDMode^.dmPaperSize := 256;
// 如果要将当前打印机纸张变为自定义 dmPaperSize 必须设置成256
pDMode^.dmPaperLength := 1900;
pDMode^.dmPaperWidth := 930;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH;
//以上三条语句是对相应的dmFields 成员进行置位。
ResetDC(Printer.Handle,pDMode^);
// 设置打印机设备环境句柄的值
GlobalUnlock(hDMode);
end;
end;
except
MessageBox(Self.Handle,'设置打印机错误!','系统提示',MB_OK+MB_ICONWARNING);
Exit;
end;
end;
解决方案 »
- idHttp控件怎样导入证书
- 大家帮助我好吗,很急...................
- 高分求嵌入delphi的word编辑控件!(不要WebBrowser!)
- dll使用问题
- 如何用Delphi得到WORD文档的标题呢?
- 不知道这是什么意思;;;;;;;;;;;;;;;
- 在 BeginPath 和 EndPath 语句中用 ExtTextOut 无效,但用 TextOut 就有效
- 请教一下各位高手,用Delphi处理报表方便吗?有分给!!
- 如何双击tabsheet标签关闭当前tabsheet?
- 请问:<delphi 5 开发人员指南>的电子文挡哪里有下载的?
- 提示实际参数和形式参数不匹配,怪事
- StringGrid控件如何能够在某一列输入时遵循数学法则,高手帮忙?
我也遇见同样的问题,还有一个奇怪的问题就是我如果把报表设置为自定义的,用宽行打印机打印的时候就没有反应了,不知各位有没有好的解决办法
--------------
好像设计的时候选择customer,然后再选择default可能会这样
1、QuickRep的page属性也设置成190*90的页面大小;
2、pagesize设置成Custom;
3、在设计过程中预览打印无误;
4、在程序独立执行后永远都是按A4纸打印,并且还夸张地拉伸了字体;
那位大侠有解决方法,望告知?
(我那版本是4.03,delphi7.0下)
还有一个就是即使pdf打印的时候是需要的大小,但是到打印机还是有问题,或者不上纸,或者 窜纸,那可能是打印的问题,
windows2000下Delphi 报表的兼容性问题所造成 . 后来才发现把现在的印表机器安装成Epson LQ-2500(C), 实际打印机为Epson LQ-1600KIII+ 然后按如下更改打印机的设置后就不会跳纸:
1>.在新增打印机Epson LQ-2500(C)后, 自定义纸张的大小,步骤如下:
a.开始-->设定-->打印机
b.档案-->服务器内容
c.格式-->建立新格式-->在"格式描述"中输入格式名称(exmple:barpacking)
d.纸张大小:宽度:21.16; 高度:13.97 单位: 公制
e.存储格式
2>.设置打印机:
a.内容-->一般-->打印喜好设定-->纸张格式-->进阶-->在纸张大小处选择上述建立的格
式(exmple:barpacking)-->确定
-->纸张/品质-->色彩:选黑色-->进阶-->在纸张大小处选择上述建立的格式
(exmple:barpacking)-->确定
b.内容-->进阶-->打印默认值-->纸张格式-->进阶-->在纸张大小处选择上述建立的格式
(exmple:barpacking)-->确定
-->纸张/品质-->色彩:选黑色-->进阶-->在纸张大小处选择上述建立的格式
(exmple:barpacking)-->确定
c.内容-->装置设定值-->纸匣设定下各分项-->全部选"无法使用"
3>.QuickReport中设置为Default; Page Size:211.67*139.70
注意必须是Default, 而不要是Custom.
以上结论是本人大概浪费了差不多半箱连续报表打印纸和一个礼拜时间后得出的心得.百试百灵,请务必按照以上步骤执行,如还有问题,与我联系.