听说是用fastreport,可我装了,但是不行呀,把页面设置为自定义,但是预览时还是A4,如何定义呢?
如果一页打不完就会换到另一页,能不能连续打印?

解决方案 »

  1.   

    超市中的打印一般都是利用画面直接打印的,一行行输出到打印机中,我记得前段时间有个发过一个这样的贴子,你可以看看,POS机都有接口的,可以调用其提供的接口进行切纸等控制,就像钱箱控制一样。
      

  2.   

    你用普通打印机是不怎么支持这么小的打印的(支持不佳)
    pos机打印是专用的
    用fastReport可以
      

  3.   

    同意楼上的,打印是和打印机有关的,如果用POS机上的打印机相对好控制,普通的则不好控制了。
    美容美发的,一般都是用那咱小打印机吧。
      

  4.   

    fastreport长宽自定义,如果打不满一页,是不是必须走完一页呢?那不是有许多空白行.
      

  5.   

    fr当然可以的,还有直接调用 api的方法呢。
    我记得以前的一个软件用的是 dx组件,比较古老了
      

  6.   

    可以使用quickreport作报表,可以支持那种小的
      

  7.   

    都是些外行....
    收银机用的打印机如IBM的,一般都有硬件商所提供的操作控件,而像IBM的打印机也可以直接对并口进行操作的.
      

  8.   

    粘一点代码,参考一下,我也是个外行,以前做过但掌握的不好:(
        if checkbox1.Checked then
        begin
          PrintLineToReceipt('北京金..........连锁店');
          PrintLineToReceipt('    ');
          printlineToReceipt('加盟店号:'+curshopcode+'        流水号:'+flowno);
          printlineToReceipt('销售日期:'+formatdatetime('yyyy-mm-dd',now())+'  销售时间:'+formatdatetime('hh:mm:ss',now()));
          printlineToreceipt('收款员编号:'+gBNUser.m_UserCode+'     收款员名称:'+gBNUser.m_UserName);
          printlinetoreceipt('---------------------------------------');
          printlinetoreceipt(' 产品编号  产品名称    数量  实收金额 ');
          printlinetoreceipt('---------------------------------------');
          for i:=1 to FrmSaleForm.m_tSaleGrid.RowCount-1 do
          begin
            printlinetoreceipt(FrmSaleForm.m_tSaleGrid.Cells[0,i]+' '+FrmSaleForm.m_tSaleGrid.Cells[2,i]+' '+FrmSaleForm.m_tSaleGrid.Cells[4,i]+' '+FrmSaleForm.m_tSaleGrid.Cells[7,i]);
            if FrmSaleForm.m_tSaleGrid.Cells[0,i]='' then break;
          end;
          printlinetoreceipt('---------------------------------------');
          printlinetoreceipt('应收:'+floattostr(summoney)+' 付款:'+Edit1.Text+' 找零:'+Label5.Caption);
          with printer do
          begin
            BeginDoc;
            printer.Canvas.TextOut(200,100,'北京...........店');
            printer.Canvas.TextOut(200,100,'    ');
            printer.Canvas.TextOut(200,100,'加盟店号:'+curshopcode+'        流水号:'+flowno);
            printer.Canvas.TextOut(200,100,'销售日期:'+formatdatetime('yyyy-mm-dd',now())+'  销售时间:'+formatdatetime('hh:mm:ss',now()));
            printer.Canvas.TextOut(200,100,'收款员编号:'+gBNUser.m_UserCode+'     收款员名称:'+gBNUser.m_UserName);
            printer.Canvas.TextOut(200,100,'---------------------------------------');
            printer.Canvas.TextOut(200,100,' 产品编号  产品名称    数量  实收金额 ');
            printer.Canvas.TextOut(200,100,'---------------------------------------');
            for i:=1 to FrmSaleForm.m_tSaleGrid.RowCount-1 do
            begin
              printer.Canvas.TextOut(200,100,FrmSaleForm.m_tSaleGrid.Cells[0,i]+' '+FrmSaleForm.m_tSaleGrid.Cells[2,i]+' '+FrmSaleForm.m_tSaleGrid.Cells[4,i]+' '+FrmSaleForm.m_tSaleGrid.Cells[7,i]);
              if FrmSaleForm.m_tSaleGrid.Cells[0,i]='' then break;
            end;
            printer.Canvas.TextOut(200,100,'---------------------------------------');
            printer.Canvas.TextOut(200,100,'应收:'+floattostr(summoney)+' 付款:'+Edit1.Text+' 找零:'+Label5.Caption);
            printer.EndDoc;
          end;
        end;这里的PrintLineToReceipt内容如下,是用来保存小票的:
    procedure TFrmPay.PrintLineToReceipt(in_sPrintStr:string);
    var
        iResult:integer;
        t:TStringlist;
    begin
        t:=TStringlist.Create;
        t.LoadFromFile('print.txt');
        t.add(in_sPrintstr);
        t.SaveToFile('print.txt');
        t.Free;
    end;