目前采用打印的方式:
printer.BeginDoc;//定义打印范围:
            OutRect.Left:=mmToPix(Sleft+VLeft,true);
            OutRect.Top:=mmToPix(STop+vtop,false); //  +CCC
            OutRect.Bottom:=OutRect.Top+LineHeight;
            OutRect.Right:=mmToPix(Sleft+VLeft+Vlen,true);//在指定范围打印内容:
            printer.Canvas.TextRect(OutRect,OutRect.Left,OutRect.Top,PrintCon[i]);printer.EndDoc;票据大小:23X12.4CM
相同的票据想连续打印多份(内容相同),不知道如何实现?使用过dmPaperSize设置过大小,失败!设置过打印机自定义纸张大小,但针式打印机好象不起作用。用激光打印机设置,感觉如果调用:printer.EndDoc;就走纸。呵呵,如果解决,分不够可以加到100以上!

解决方案 »

  1.   

    printer.EndDoc后当然走纸,如果你想不走纸连着一起打的话,那就在printer.EndDoc之前打完。
    ......
    for i:=0 to N-1 do
        printer.Canvas.TextRect(OutRect,OutRect.Left,OutRect.Top,PrintCon[i]);
    printer.EndDoc
      

  2.   

    如果不走纸连续打印,那么循环体内,要让打印的坐标不断的变化,然后调用printer.Canvas.TextRect(OutRect,OutRect.Left,OutRect.Top,PrintCon[i]);
    就可以了,否则打印到同一个地方了;如果是打印多份到不同的纸上,那么就把你的
    printer.BeginDoc;
    ……
    printer.EndDoc;
    整个放到一个循环体内就可以了,循环的次数就是你想打印的份数。
      

  3.   

    打印坐标可以无限制增大?比如一次打印500份,纵向可能62米!把它放在BeginDOC和EnDDoC之间?楼上2位回复意思明白,还没来得及试。现在更挠头的是:程序执行时,有时候出现“遇到问题需要关闭,我们对此引起的不便表示抱歉”
    《调试》 《发送错误报告》 《不发送》点击《不发送》连续出现3,4次这个提示,接着出现“Run Error 216 at 004c26EE"
    而且这个错误,有时候有,有时候没有。。真郁闷死了!根本不知道从哪找这个错误!!!!
    特别是:同样的程序在U盘里咋操作都不出现这个错误!到硬盘出现就很频繁!而且时有时没有!
    这个疑难更挠头!!!!!!!!!!!谁遇到过?指点一二?
      

  4.   

    在Delphi调试环境下是:EAccessViolation错误,查了一下资料,是表示“访问冲突”,通常是指针用法不当。但程序里没定义和使用指针的。
      

  5.   

    汇报:
    查找问题:  SQLCir:='delete  * FROM  '+gUseTable;
      DM.ADOCmd.CommandType:=cmdTEXT;
      DM.ADOCmd.CommandText:=SqlCir;
      DM.ADOCmd.Execute;
    用ADO连接ACCESS数据库,发现凡是执行“delete * from DBname“,
    当关闭程序时就出现这个错误,但为何以前没有呢?
    目前是这样的~~~~
      

  6.   

    回复不允许三次,只好用个Ghost来继续了:关于数据库出错的问题,恢复到以前的备份程序,先将就着用。
    继续探讨连续打印问题,今天试试了,结果如下:
    如果连续打印内容的页高总和小于设置的打印纸高度,可以连续打印,直到把此页打印完毕。
    否则只打印一页。
    代码如下:(有所删减,便于阅读)printer.BeginDoc;for j:=1 to ConPage do begin   {conPage是连续打印份数}      Stop:=Stop+(j-1)*LpageHeight;               {LpageHeight是将打印的每页高度,Stop是打印顶距}      DM.ADOQ.First;
          while not DM.ADOQ.Eof  do begin            OutRect.Left:=mmToPix(Sleft+VLeft,true);
                OutRect.Top:=mmToPix(STop+vtop,false); //  +CCC
                OutRect.Bottom:=OutRect.Top+LineHeight;
                OutRect.Right:=mmToPix(Sleft+VLeft+Vlen,true);            printer.Canvas.TextRect(OutRect,OutRect.Left,OutRect.Top,PrintCon[i]);        DM.ADOQ.Next;
          end;//while  for ALL DB
      
    end;//for jprinter.EndDoc;现在的问题是,如果打印的内容超过打印的一页(一般是A4纸大小),怎么连续打印?
      

  7.   

    想打多份的话,设置printer.Copies
      

  8.   

    哦,可能没说清楚,是这样的,需要连续打印票据,每个票据高度是固定的(例如是12.70cm),比如连在一起的几十张相同的票据都打印相同的内容,怎么实现?打印纸A4的是21X29.7CM,打印上述的票据,打印2份即停止了。说的简化一点:在一张很长的纸上,间隔相同地打印相同内容而已。
      

  9.   

    打印机肯定不支持,我查了~
    是针式的,Citizen 230现在要通过程序来控制。
      

  10.   


    继续探讨连续打印问题,今天试试了,结果如下:
    如果连续打印内容的页高总和小于设置的打印纸高度,可以连续打印,直到把此页打印完毕。
    否则只打印一页。
    代码如下:(有所删减,便于阅读)printer.BeginDoc;for j:=1 to ConPage do begin   {conPage是连续打印份数}      Stop:=Stop+(j-1)*LpageHeight;               {LpageHeight是将打印的每页高度,Stop是打印顶距}      DM.ADOQ.First;
          while not DM.ADOQ.Eof  do begin            OutRect.Left:=mmToPix(Sleft+VLeft,true);
                OutRect.Top:=mmToPix(STop+vtop,false); //  +CCC
                OutRect.Bottom:=OutRect.Top+LineHeight;
                OutRect.Right:=mmToPix(Sleft+VLeft+Vlen,true);            printer.Canvas.TextRect(OutRect,OutRect.Left,OutRect.Top,PrintCon[i]);        DM.ADOQ.Next;
          end;//while  for ALL DB
      
    end;//for jprinter.EndDoc;现在的问题是,如果打印的内容超过打印的一页(一般是A4纸大小),怎么连续打印?继续请教,应该不是难题吧?