線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1709
推到 Plurk!
推到 Facebook!

关于POS机打印的问题

答題得分者是:kgt
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-08 18:54:09 IP:222.184.xxx.xxx 未訂閱
一段代码如下: 
 
原理:直接对“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 引用回覆 回覆 發表時間:2005-12-08 20:45:52 IP:61.219.xxx.xxx 未訂閱
第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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-08 21:14:58 IP:222.184.xxx.xxx 未訂閱
第一点不懂怎么设计一下,否则测试不了程序的运行效果 我的起步始于ktop,我将永远支持ktop。
------
我的编程起步于ktop,我将永远支持ktop
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-12-08 21:41:42 IP:61.219.xxx.xxx 未訂閱
HI ntjrr日安: 請您用LPT這個KEYWORD去SEARCH一下,看有沒有符合您需求的部分。
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-12-11 18:31:25 IP:222.184.xxx.xxx 未訂閱
现在解决了部份问题,可以运行的代码如下:
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-12-11 20:04:25 IP:61.219.xxx.xxx 未訂閱
HI ntjrr日安: 那就是對每一個字串作補足空白字元的動作 1.先定下某欄位最大長度 2.求資料欄位長度 3.補足1-2後的空白在字串的左邊或右邊
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-12-13 10:09:57 IP:222.184.xxx.xxx 未訂閱
引言: HI ntjrr日安: 那就是對每一個字串作補足空白字元的動作 1.先定下某欄位最大長度 2.求資料欄位長度 3.補足1-2後的空白在字串的左邊或右邊
前两步我都可以做到,就是补足空白不懂做,我要做的是补在字串的右边。谢谢 我的起步始于ktop,我将永远支持ktop。
------
我的编程起步于ktop,我将永远支持ktop
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-12-13 12:35:24 IP:210.243.xxx.xxx 未訂閱
hi ntjrr日安: 您的語法是?
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-12-13 13:12:17 IP:210.243.xxx.xxx 未訂閱
系統時間:2024-04-27 22:54:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!