QucikReport自定义纸张大小

我今天刚解决这个问题.如下.新加一个打印机: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; 就好了. 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值