我用star 3200+打印票据,为什么设置为自定义纸张打印时总是要要走一段纸呢?如果设置为系统提供的纸张类型就一点也不走?哪位有解决办法请快快指教!急啊!
解决方案 »
- 用Delphi做的程序,用InnoSetup打包后,如何屏蔽程序所有的报错!!
- 请de410和yhf365 两位朋友进来,紧急
- 菜鸟问题,如何将packed record 转换为字符串然后通过IdUDPServer1发出去
- 关于MsComm控件的问题
- 如何将char类型转换成string类型呢?见下面
- 有关考试报名系统的
- 什么方法可以知道当前操作系统的安装目录?
- 为什么控件上的HINT有时候不能显示出来?
- 寻找DELPHI/C++ BUILDER白盒测试工具
- 帮帮忙,告诉我如何动态创建一个accsee库
- @@@急急急,用delphi6自己带的QuickReport报表工具做套打报表,为什么只打印出来左边的一部分,右边总少一部分???
- 怎样实现这个功能:delphi中把 *.mdb 中的表的所有纪录导出为文本文件,不要一条 一条的导。那样太慢了,又没有其他方法呀?谢谢哦
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
if self.PrinterSetupDialog1.Execute then
begin frmHeader.QuickRep1.PrinterSettings.PrinterIndex := printer.PrinterIndex;
frmDetail.QuickRep1.PrinterSettings.PrinterIndex := printer.PrinterIndex;
///set the printer paper 's width and height
self.SetPaperWidth(210);
self.SetPaperHeight(279);
//....print report now
//....print report end
end;
这样在程序里面设置纸张大小,就不用管外面选择打印机的时候设置的多少了?
现在我发现我的程序里面的设置纸张没有起作用!EPSON 3250
打印的时候走纸走的很厉害,老是串
begin frmHeader.QuickRep1.PrinterSettings.PrinterIndex := printer.PrinterIndex;
frmDetail.QuickRep1.PrinterSettings.PrinterIndex := printer.PrinterIndex;
///set the printer paper 's width and height
self.SetPaperWidth(210);
self.SetPaperHeight(279);
//....print report now
//....print report end
end;