我这的是POS系统,要求每扫一个商品就打印出该商品信息,当全部扫完顾客结账时打印出小结,然后走纸换页.
我现在是每打印一个商品信息就会走纸换页,没达到以上目的.
我的打印代码是:
procedure TForm1.PrintStrings(Strings: TStrings);
var
  Prn: TextFile;
  i: word;
begin
  AssignPrn(Prn);
  try
    Rewrite(Prn);
    try
      for i := 0 to Strings.Count - 1 do
        write(Prn, Strings.Strings[i]);
    finally
      CloseFile(Prn);
    end;
  except
    on EInOutError do
      MessageDlg('文本打印出错!', mtError, [mbOk], 0);
  end;
end;不执行"CloseFile(Prn);"就不开始打印,执行了,就会打印并走纸换页.
请问各位大侠,怎么样才能不让他走纸换页的打印完

解决方案 »

  1.   

    执行CloseFile(Prn); 就会开始打印呀
      

  2.   

    CSDN的专家那去了,还是觉得分少呀?怎么就没人回答呢?
      

  3.   

    procedure   TForm1.PrintStrings(Strings:   TStrings); 
    var 
        Prn:   TextFile; 
        i:   word; 
    begin 
        AssignPrn(Prn); 
        try 
            Rewrite(Prn); 
            try 
                for   i   :=   0   to   Strings.Count   -   1   do 
                    write(Prn,   Strings.Strings[i]); 
            finally 
                CloseFile(Prn); 
            end; 
        except 
            on   EInOutError   do 
                MessageDlg( '文本打印出错! ',   mtError,   [mbOk],   0); 
        end; 
    end; CloseFile(Prn);  这个语句就能打印吗?不可能,你是创建了一个文本文件,然后写入信息,CloseFile(Prn); 
    是关闭,没有涉及打印。
      

  4.   

    AssignPrn(Prn);可以打印,因为分配了一个文件指针给打印机。
    楼主要不换页打印,有三种方案,一种是使用打印机底层的硬拷贝指令,这种方法比较麻烦,不说;再一种是使用楼主的AssignPrn方案;最后一种是使用VCL的Printers单元。先分析楼主的以下代码:
    AssignPrn(Prn);
    Append(Prn);
    try
    ……
    finally
     CloseFile(Prn);     
    end;
    因为楼主调用了CloseFile(Prn);这就是换页的原因。所以楼主只要在准备换页时再调用CloseFile(Prn)即可。最后一种方案:
    Printer.BeginDoc;
    try
     ……
    finally
     Printer.EndDoc;
    end;
    一般人也是固定了这种代码结构,固化了自己的思维,不知变通。Printer.EndDoc,Printer.NewPage,都会引起换页,所以同样只要在准备换页时再调用Printer.EndDoc,Printer.NewPage即可。
      

  5.   

    这么久都没人解决,哎!以上说法都无法解决的问题,我google到,还是谢谢各位了,送分
      

  6.   

    还是贴个解决办法,也许以后有人能用的上。
    不换行打印
    procedure TFrmMain.AddPrintStrings(Strings: TStrings);
    var
      Prn: TextFile;
      i: word;
    begin
      Assignfile(Prn,'lpt1');
        printer.Canvas.Font.Name:='宋体';
        printer.Canvas.Font.Size:=9;
        printer.Canvas.Font.Charset:=GB2312_CHARSET;
      try
        Rewrite(Prn);
        try
          for i := 0 to Strings.Count - 1 do
            writeln(Prn, Strings.Strings[i]);
        finally
          CloseFile(Prn);
        end;
      except
        on EInOutError do
          MessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATION or MB_OK);
      end;
    end;
    --***************以下是换行打印的---------------------------
    procedure TFrmMain.PrintStrings(Strings: TStrings);
    var
      Prn: TextFile;
      i: word;
    begin
      AssignPrn(Prn);
      try
        Rewrite(Prn);
        printer.Canvas.Font.Name:='宋体';
        printer.Canvas.Font.Size:=9;
        printer.Canvas.Font.Charset:=GB2312_CHARSET;
        try
          for i := 0 to Strings.Count - 1 do
            writeln(Prn, Strings.Strings[i]);
        finally
          CloseFile(Prn);
        end;
      except
        on EInOutError do
          MessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATION or MB_OK);
      end;
    end;