我现在做一个票据的打印,用户要求就象超市的票据打印一样。使用两边带孔的纸,票据已经印好在上面,每两张之间有虚线相间。
   我在调试时,怎么刚打一张票据,整卷纸就都随之滚动出来了,如何控制,使之停在第二张的位置上,等待继续打印呢

解决方案 »

  1.   

    这些应该是在程序里控制吧?
    我是用的:
    printer.BeginDoc;
    ....
    printer.EndDoc;
    我试了用printer.pageheight,可编译痛不过,提示该属性是只读的。还有,怎么设置成自定义纸呢?我在控制面板-》打印机-》属性里看了,没这个设置,我是应该在程序里控制吧,查了pringer的一些属性、过程,没看到有类似的。谢谢!
      

  2.   

    关于套打我没用过printer.BeginDoc这类的打印,我是用的quickrep的打印方法,将quickrep的大小设为自定义的大小走纸就准确了,没你说的这么麻烦
      

  3.   

    quickrep也适用于票据打印吗?
    我一般只用它做报表的
      

  4.   

    当然了,我做了几十个套打都用的quickrep
      

  5.   

    我做的票据很简单的,在FORM上放了个panel,又在上面用QRShape画的票据7列,7行,还有用label写的一些相关信息。
    用户按打印时,我就用刚才说的方法打印,只打填的数据,使数据在凭证上对号入坐就行了
    用我以前的方法可以实现这个功能吗
      

  6.   

    呵呵,那么你们这样的数据是不保存到数据库中的了?用你以前的方法应该可以实现,不过我不熟悉.看看别人能不能有好办法.还有就是,用quickrep做和你说的方法是一样的,只不过容器不是panel而是quickrep.
      

  7.   

    数据当然可以保存到数据库里去啦,上面放了TEdit,TLable的。
      

  8.   

    我看书上有用TDeviceMode类型的变量设置打印输出的长度的,但讲的很不完整。我的代码如下:
    var   ADevice,ADriver,APort:array[0..255] of Char;
      DeviceHandle:THandle;
      DevMode:PDeviceMode;
    begin
      ..
      printer.GetPrinter(ADevice,ADriver,APort,DeviceHandle);  if DeviceHandle=0 then
      begin
        printer.PrinterIndex :=printer.PrinterIndex;
        printer.GetPrinter(ADevice,ADriver,APort,DeviceHandle);
      end;  if DeviceHandle<>0 then
        DevMode:=GlobalLock(DeviceHandle);  with DevMode^ do
      begin
        dmFields:=dmFields or DM_PAPERSIZE;
        dmPaperSize:=0;
        dmPaperLength:=1000;
      end;
      
      if  DeviceHandle<>0 then
        GlobalUnlock(DeviceHandle);  try
      printer.BeginDoc;
      printer.textout();  
      ..
      finally
        printer.EndDoc;
      end;
      
    end;
    但执行结果仍然是全部卷出去了,是什么地方错了?
      

  9.   

    有没有人能解释呀?
    我用木鱼的方法试了下,在一个quickrep上放了几根QRshape,已将FORM的KEYPRVIEW属性设为TRUE了,可执行quickrep1.preview却什么也没有,打印也没东西
      

  10.   

    QuickRep.Page.PaperSize := Custom;
    后,可自定议纸张大小(长、宽),上下左右的边距。
    可在设计期规定,也可在运行期用程序更改,看您自己的了。
      

  11.   

    谢谢大家,我已经用DevMode的方法解决了