具体打印机的控制码不太一样,所使用的打印机为SP320S 
var 
  PrnHwnd:THandle; 
procedure OpenLptPrn; 
begn 
      PRNHwnd:=CreateFile( 
      'LPT1', 
      GENERIC_READ or GENERIC_WRITE, 
      0, 
      nil, 
      OPEN_EXISTING, 
      FILE_FLAG_OVERLAPPED, 
      0); 
      if PRNHwnd=INVALID_HANDLE_VALUE then 
        Exception.Create('无效并行口'); 
end; 
procedure SendToPrinter(SendBuf:array of byte);overload 
var 
  tem:cardinal; 
begin 
  WriteFile(PRNHwnd,SendBuf,High(SendBuf)+1,tem,OL); 
end; 
 
procedure SendToPrinter(SendBuf:string);overload 
var 
  i:integer; 
begin 
  for i:=1 to Length(SendBuf) do 
    SendToPrinter([ord(SendBuf[i])]); 
end; 
  SendToPrinter([$1B,$7A,$31]);         //1/6"行距 
  SendToPrinter([$1B,$43,22]);      //页长22行  即页长22/6" 
 
  SendToPrinter([$1B,$41,72]);       //设定36/72"行距 
  SendToPrinter([$1B,$4A,80]);     //实行单次80/72"顺向跳行 
  SendToPrinter([$1B,$4A,29]);      //实行单次32/72"顺向跳行 
 
  SendToPrinter([$1B,$44,8,25,0]);  //设置横向制表 
 
  SendToPrinter([9]);               //实行横向制表 
  SendToPrinter(PrintXv.Plaza);          //打印 
  SendToPrinter([9]);               //实行横向制表 
  SendToPrinter(PrintXv.LaneNo);          //打印 
  SendToPrinter([$0A]);             //跳行 
  SendToPrinter([$1B,$4A,24]);     //实行单次80/72"顺向跳行 
 
  SendToPrinter([9]);               //实行横向制表 
  SendToPrinter(PrintXv.ClerkNum);      //打印 
  SendToPrinter([9]);               //实行横向制表 
  SendToPrinter(PrintXv.Date);          //打印 
  SendToPrinter([$0A]);             //跳行 
  SendToPrinter([$1B,$4A,24]);     //实行单次80/72"顺向跳行 
 
  SendToPrinter([9]);               //实行横向制表 
  SendToPrinter(PrintXV.ClassCar);      //打印 
  SendToPrinter([9]);               //实行横向制表 
  SendToPrinter(PrintXV.MoneyNum);    //打印 
  SendToPrinter([$0C]);             //跳页根据上文,你应该在换页的时候向打印机发出一个SendToPrinter([$0C]);可以实现

解决方案 »

  1.   

    或者用一下的方法:
    1.用canvas.Textout来打印
       Canvas.TextOut(x,y,'hello');x,y为坐标
    2.用canvas.textrect
    with Printer do
      begin
        BeginDoc;
        Canvas.TextRect(Rect(200,200,PageWidth-200,PageHeight-200),
                        200, 200, Memo1.Lines.Text);
        EndDoc;
      end;
    end;然后用Printer.NewDoc来强制换页。
    uses Printers;
    begin
         Printer.BeginDoc;
         while (你的循环条件) do
         begin
              {在这里用Canvas的方法进行打印输出}
              Printer.NewDoc;
         end;
         Printer.EndDoc; 
    end;
      

  2.   

    以前写的一个小程序可实现多个文本文件的批打印功能,换页当然不成问题,全部原码.delphi5.0
    编译.win98下运行通过,win2000下有一点问题.需要的话,请留下 e-mail;
      

  3.   

    To lwm8246
       也给我一份看看吧!。
       [email protected]
      

  4.   

    我有一题目:将ListBox中的文本输出到打印机,文本内容一页打不下,可我就是没法控制好换页,而且我也不知道如何使打印内容自动适合不同类型的纸张,我用的是LQ1900K,16开纸。哪位能给个源程序?
      

  5.   

    To boboqin 程序已发出,请注意查收