80分求解决quick report 打印问题

ydyuse 2004-07-29 11:17:28
quick report在WIN2000,WIN98下自定义纸张打印,每次打印机只走定义纸张大小。
解决后给分。我看了不少这样的帖子,但没解决。
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
getit911 2004-07-31
  • 打赏
  • 举报
回复
1、如果在QuickReport用自定义纸张,打印机驱动也要设成自定义纸张。
2、是不是你的打印设置或操作系统有问题呀。
ydyuse 2004-07-31
  • 打赏
  • 举报
回复
谁有好办法,我再给他100分。
ydyuse 2004-07-31
  • 打赏
  • 举报
回复
我现在用的就是连续纸,中间有孔的那种,但每次都走A4那么大,同时在WIN98下打印还打印不出来。我用的是DELPHI 6 的QUICK REPORT
hjx38 2004-07-31
  • 打赏
  • 举报
回复
兄弟你真走运,我今天刚解决这个问题.如下.新加一个打印机:qs_little,首先你要在打印服务器中设置一张你定义的张如'qs_littlepaper' .然所把打印机默认纸张设为这:
procedure find_xp_qs_little;//nt2000中小纸打印机
var
handle:hwnd;
hPrinter: thandle;
pForm : PFormInfo1;
Forms :array[1..999] of FORM_INFO_1;
cbBuf,pcbNeeded1,pcReturned : DWord;
ii : integer;
PTestOut : PDeviceMode;
testout : array[1..3000]of byte;
Device, Driver, Port: array[0..80] of Char;
DMode : THandle;
m_string:string;
m_byte:dword;
PRINTINFO:PPRINTERINFO1;
begin
try
PaperSizeNum:= -1;
//打开发票打印机,以获得打印机句柄
if not(openprinter('qs_little',HPRINTER,NIL)) THEN
MessageDlg('无法打开打印机设置纸张,qs_little!',mtError,[mbOK],0);
pForm := @Forms[1];
cbBuf := sizeof(FORM_INFO_1)*999;
//敉举所有的纸张类型
EnumForms(hPrinter,1,pForm,cbBuf,pcbNeeded1,pcReturned);
if pcReturned <> 0 then
For ii := 0 to pcReturned - 1 do

begin
if Forms[ii + 1].pName = 'qs_littlepaper' then
begin
PaperSizeNum:=2 ;
break;
end;
//break;
end;
//如果没有找到我设的自定义纸张类型,让使用者加上去
if PaperSizeNum = -1 then
begin
//AddMyForm;//加纸张类型的方法
messagedlg('请在发票打印机的打印首选项里将纸张类型设置为''qs_littlepaper''',mtWarning,[mbOK],0);
// Halt;
end;
//use DocumentProperties function to get PaperSize Number
pTestout := @testout;
Printer.GetPrinter(Device, Driver, Port, DMode);
getmem(printinfo,1024);
getprinter(hprinter,1,printinfo,1024,@papersizenum);
m_byte:=DocumentProperties(Handle,hprinter,printinfo.pdescription,PTestOut^,PTestOut^,0);
getmem(ptestout,m_byte);
DocumentProperties(Handle,hPrinter,printinfo.pdescription,PTestOut^,PTestOut^,DM_OUT_BUFFER);
PaperSizeNum:=PTestout^.dmPaperSize;
m_string:=ptestout^.dmFormName ;
//DocumentProperties最后一个参数为DM_OUT_BUFFER时从打印机中读取设备状态
except
on E:Exception do
MessageDlg('打印机设置失败'+#13+E.Message,mtError,[mbOK],0);
end;
end;
procedure set_xp_littlepaper;
var
Device: array[0..255] of char;
Driver: array[0..255] of char;
Port: array[0..255] of char;
hDMode: THandle;
PDMode: PDEVMODE;
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_FORMNAME;
pDMode^.dmPaperSize :=PaperSizeNum;//PaperSizeNum是一个integer变量,它的取得见下面
pDMode^.dmFormName :='qs_littlepaper';//MyPaper是我自定义的纸张类型
resetdc(printer.handle,pdmode^);
GlobalUnlock(hDMode);
end;
end;
end;
然后在REOPORT 中纸张设置DEFAULT SIZE

在QUICKREP1.PRINT前运行
find_xp_qs_little;
set_xp_littlepaper;
就好了.
我今天已经试用成功在NT/2000/XP

getit911 2004-07-31
  • 打赏
  • 举报
回复
用连续纸,两边带空的那种,就会按要求走纸。
ydyuse 2004-07-31
  • 打赏
  • 举报
回复
谢谢,不过我是这样做的。请问要注意打印机驱动程序的什么问题?
luo_jian_dong 2004-07-30
  • 打赏
  • 举报
回复
这个我做过,
设计的时后,报表的大小要设置实际大小,
你要把打印机的纸张属性设置为自定义格式,
同时,注意打印机驱动程序的问题,
ydyuse 2004-07-29
  • 打赏
  • 举报
回复
没人肯帮忙?

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧