现在能执行,但是不论我如何改纸,DMPAPERSIZE一直是9,不知为什么。请指教。 程序如下:procedure TForm1.Button1Click(Sender: TObject); var 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; papersizenum:integer; m_string:string; m_byte:dword; PRINTINFO:PPRINTERINFO1; begin try PaperSizeNum := -1; //打开发票打印机,以获得打印机句柄 { if Not OpenPrinter(PChar(Printer.Printers.Strings[Printer.PrinterIndex]),hPrinter,nil) then begin
Exit; end;} if not(openprinter('EPSON LQ-1600K',HPRINTER,NIL)) THEN MessageDlg('无法打开打印机设置纸张!',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 // if Forms[ii + 1].pName = 'qsPaper' then begin listbox1.Items.Add(forms[ii+1].pname); PaperSizeNum:= -2; if Forms[ii + 1].pName = 'A4' then begin showmessage('ok'); // PaperSizeNum :=Forms[ii + 1].size ; break; end; //break; end; //如果没有找到我设的自定义纸张类型,让使用者加上去 if PaperSizeNum = -1 then begin //AddMyForm;//加纸张类型的方法 messagedlg('请在发票打印机的打印首选项里将纸张类型设置为''MyPaper''',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;
程序如下:procedure TForm1.Button1Click(Sender: TObject);
var
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;
papersizenum:integer;
m_string:string;
m_byte:dword;
PRINTINFO:PPRINTERINFO1;
begin try
PaperSizeNum := -1;
//打开发票打印机,以获得打印机句柄
{ if Not OpenPrinter(PChar(Printer.Printers.Strings[Printer.PrinterIndex]),hPrinter,nil) then
begin
Exit;
end;}
if not(openprinter('EPSON LQ-1600K',HPRINTER,NIL)) THEN
MessageDlg('无法打开打印机设置纸张!',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
// if Forms[ii + 1].pName = 'qsPaper' then
begin
listbox1.Items.Add(forms[ii+1].pname);
PaperSizeNum:= -2;
if Forms[ii + 1].pName = 'A4' then
begin
showmessage('ok');
// PaperSizeNum :=Forms[ii + 1].size ;
break;
end;
//break;
end;
//如果没有找到我设的自定义纸张类型,让使用者加上去
if PaperSizeNum = -1 then
begin
//AddMyForm;//加纸张类型的方法
messagedlg('请在发票打印机的打印首选项里将纸张类型设置为''MyPaper''',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;