前几天我发了一个关于POS58打印的帖子,多谢大家帮忙 现在已经解决打印的问题了
我是用writeln一行一行的写进去了,
但现在又有一个问题了
我的小票格式和超市的格式极其相似,格式如下单号:xxxxxxxxxx
----------
姓名:aaaa
---------- 
名称    数量  单价  金额
xxx     xx    xxx  xxxxx---注:这是个循环,有可能有多个商品
----------如上格式所示,那如果有了多个商品,有了循环我该怎么做?我是用writeln写进去的啊,怎么判断,怎么循环啊?

解决方案 »

  1.   

    思路如下,具体你自己实现:
    var
      S: string;
      ADOQuery: TDataSet;
    begin
      with ADOQuery do
      begin
        ///用ADOQuery取出商品数据
        while not Eof do
        begin
          S :=
            FieldByName('名称').AsString + '    ' +
            FieldByName('数量').AsString + '    ' +
            FieldByName('单价').AsString + '    ' +
            FieldByName('金额').AsString;//用字符串连起来再打印
          WriteLn(S);
          Next;
        end;
      end;
    end;
      

  2.   

    不建议楼上这样做,因为有的时候汉字与英文字母占的位置不等,及难对齐。
    建议循环一次输入一次。
    with printers do
    begin
        begindoc;
        while not Eof do 
        begin 
          cavas.textout(x,y,FieldByName('名称').AsString);
          cavas.textout(x1,y1,FieldByName('数量').AsString);
          cavas.textout(x2,y2,FieldByName('单价').AsString);
          cavas.textout(x3,y3,FieldByName('全额').AsString);
          Next; 
        end; 
        enddoc;
    end;
    X,Y为输入的横坐标和纵坐标,x1和y1是可以通过计算得到。例如:平移距离为10,纵向距离为10。
    那么x1=x+10;y1=y+10;
    这样打印准确。