关于POS机打印的问题 |
答題得分者是:kgt
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
一段代码如下:
原理:直接对“LPT1”端口进行输出,使用此种方式打印速度是最快的。 对文本文件进行写操作,当文本文件的文件名为“LPT”或“COM”等保留字里,即是对指定端口写。 my:='lpt1'; filehandle:=fileopen(my,fmopenwrite); fileclose(filehandle); if filehandle<0 then begin messagebox(handle,'lpt1错误','错误',mb_iconerror); exit; end else begin assignfile(tf,my); rewrite(tf); writeln(tf,chr(27) chr(112) chr(0) chr(18) chr(22)); with query1 do begin sql.Clear; sql.Add('select 企业名称 from 企业档案'); close; open; end; writeln(tf,' ' query1.fieldbyname('企业名称').AsString); if strtofloat(label6.Caption)<0 then writeln(tf,' ' '退货单') else writeln(tf,' ' '销售单'); writeln(tf,'流 水 号:' form1.StatusBar1.Panels[1].Text); writeln(tf,'销售日期:' datetimetostr(now)); writeln(tf,'收 款 员:' form1.StatusBar1.Panels[3].Text); writeln(tf,'--------------------------------'); writeln(tf,'商品编码' ' ' '数量' ' ' '单价' ' ' '金额'); writeln(tf,'--------------------------------'); for a:=1 to form1.StringGrid1.RowCount-2 do begin writeln(tf,form1.StringGrid1.Cells[2,a]); writeln(tf,form1.StringGrid1.Cells[1,a] ' ' form1.StringGrid1.Cells[5,a] ' ' form1.StringGrid1.Cells[4,a] ' ' form1.StringGrid1.Cells[6,a]); end; writeln(tf,'--------------------------------'); writeln(tf,'合计金额:' ' ' Label8.Caption); writeln(tf,'找零金额:' ' ' label9.Caption); writeln(tf,'谢谢惠顾,欢迎下次光临'); writeln(tf,'请妥善保管您的电脑小票'); writeln(tf,''); writeln(tf,''); writeln(tf,''); writeln(tf,''); writeln(tf,''); closefile(tf);提问如下: 1。因为我现在的打印机是USB端口的,客户的端口有时候也是不确定的,能否不限定打印端口为LPT1,而用任何可用的有效端口呢 2。上述代码中商品编码、数量、单价、金额等用了STRINGGIRD1中的记录,能否改为直接取ADOQUERY中的记录,例如,我的SQL查询为 select 商品编码、数量、单价、金额 from tb_sf ,那么如何直接写入这个查询结果呢,(就是说用不着先写到STRINGGRID1中,再取出了,那样反而复杂了) 我的起步始于ktop,我将永远支持ktop。
------
我的编程起步于ktop,我将永远支持ktop |
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
第2點:
我只是寫個大概架構,未編譯過。
adoquery1.sql.Clear; adoquery1.sql.Add('select 商品編碼,數量,單價,金額 from tb_sf order by 商品編碼'); adoquery1.open; adoquery1.first; with not adoquery1.eof do begin writeln(tf, adoquery1.商品編碼 inttostr(adoquery1.數量) inttostr(adoquery1.單價) inttostr(adoquery1.金額) ); adoquery1.next; end; |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
现在解决了部份问题,可以运行的代码如下: Writeln(printtext,'-------------------------------------'); Writeln(printtext,' 项目名称' ' 单价' ' 数量' ' 金额'); adoquery1.First; while not adoquery1.Eof do begin writeln(printtext,'' adoquery1.fieldbyname('项目名称').AsString adoquery1.fieldbyname('单价').AsString); adoquery1.Next; 现在打印出来的效果为 阿莫西林胶囊5.33 中药费200 我想要的效果为 阿莫西林胶囊 5.33 中药费 200 也就是说不论前面的项目名称有几个字,单价的左边距都能相同,在同一垂直线上。 我的起步始于ktop,我将永远支持ktop。發表人 - ntjrr 於 2005/12/11 18:33:05
------
我的编程起步于ktop,我将永远支持ktop |
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |