POS小票打印 POS小票打印,要如何控制走纸,就是有多少内容,纸张出多少!除了直接控制打印,还有什么方法嘛,如用报表等! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我知道答案了!// 向LPT口打印一个文本文件procedure TPosFrm.PrintFile(AFileToPrint: string);var Port, FileToPrint: TextFile; ALine: string;begin AssignFile(FileToPrint, AFileToPrint); Reset(FileToprint); AssignFile(Port, 'LPT1'); Rewrite(Port); while not Eof(FileToPrint) do begin Readln(FileToPrint, ALine); Writeln(Port, ALine); end; CloseFile(Port); CloseFile(FileToPrint);end; // 打印小单 // 输出到文本,稍后再输出到LPT1端口; OutFile:=ExtractFilePath(Application.ExeName)+'output.txt'; AssignFile(F, OutFile); Rewrite(F); CompanyTitle:=SysParms.CompanyTitle+'购物清单'; CompanyTitle:=StringOfChar(' ', (32-Length(CompanyTitle)) div 2)+CompanyTitle; Writeln(F, CompanyTitle); Writeln(F,'--------------------------------');// Writeln(F,'收银机:'+EdPosID.Text+' 单号:'+EdSaleID.Text);// Writeln(F,'收银员:'+EdOpID.Text+ ' 日期:'+EdSaleDate.Text); Write(F,'收银员:', Format('%-10s', [STOpID.Caption])); Writeln(F, '单号:'+STSaleID.Caption); Writeln(F,'日期:'+STSaleDate.Caption+ ' 时间:'+FormatDateTime('hh:mm:ss', Now)); Writeln(F,'--------------------------------'); // 12345678901234567890123456789012 Writeln(F,'商品名称 数量 单价 金额'); ADSSaleList.DisableControls; ADSSaleList.First; while not ADSSaleList.Eof do begin MerName:=ADSSaleList.FieldValues['MerName']; len:=Length(MerName); if len < 18 then MerName:=MerName+StringOfChar(' ', 18-len); if (len mod 2) = 0 then Write(F, Copy(MerName, 1, 18)) else Write(F, (Copy(MerName, 1, 17)+' '):18); Write(F, ADSSaleList.FieldValues['Qty']:2); Write(F, FormatFloat('0.0', ADSSaleList.FieldValues['Price']):6); Writeln(F, FormatFloat('0.0', ADSSaleList.FieldValues['Amount']):6); ADSSaleList.Next; end; ADSSaleList.EnableControls; Writeln(F,'--------------------------------'); Writeln(F,'合计:',STHj.Caption:8, ' 让利:', STRl.Caption:8); Writeln(F,'实收:',STSs.Caption:8, ' 金卡:', FormatCurr('0.00', CardPayment):8 ); Writeln(F,'现金:', FormatCurr('0.00', StrToCurr(EdCash.Text)-CardPayment):8, ' 找补:', STBack.Caption:8 ); Writeln(F,' '); //空行,添加或减少空行即可控制出纸多少。 ... PrintFile(Outfile); // 输出文件到打印口 输出如下例: XX化妆品世界购物清单--------------------------------收银员:01 单号:000000329日期:2003-07-16 时间:17:53:28--------------------------------商品名称 数量 单价 金额8g华美健强力消痘乳 4 16.0 64.0小口红 1 5.0 5.0180g隆力奇蛇胆不紧 3 20.8 62.4速效脱毛露 2 7.5 15.0美容海藻面膜 3 18.0 54.0蕾琪唇彩 1 12.0 12.0 .....--------------------------------合计: 2058.40 让利: 0.00实收: 2058.40 金卡: 0.00现金: 2100.00 找补: 41.60因宽度只有58mm,故商品名切去部分。 我在上面的程序基础上修改成自己需要的小票打印,调试的时候发现,一直通不过,后来才发现.....那里把CloseFile(outputfile)给省略了。现在终于可以了。:-)想要用上面程序的朋友,记得加上CloseFile(outputfile)。 如果没有装打印机的话,怎样让它跳出// 向LPT口打印一个文本文件procedure TPosFrm.PrintFile(AFileToPrint: string);var Port, FileToPrint: TextFile; ALine: string;begin AssignFile(FileToPrint, AFileToPrint); Reset(FileToprint); AssignFile(Port, 'LPT1'); Rewrite(Port); while not Eof(FileToPrint) do begin Readln(FileToPrint, ALine); Writeln(Port, ALine); end; CloseFile(Port); CloseFile(FileToPrint);end;这段程序?不然程序无响印了. 楼上大侠,如果小票打印机是没有带硬字库的怎么打呢?如EPSON 210PD。 回复人: XdxDaxiong(小洪) ( ) 信誉:100 2003-10-18 16:08:00 得分:0 楼上大侠,如果小票打印机是没有带硬字库的怎么打呢?如EPSON 210PD。 有两种方式:一是利用驱动,这样的话,楼上的方式就不行了,必须是利用windows打印。需要利用windows打印函数,或者报表工具来打印。 二是采用图形方式打印,利用windows自带或者ucdos带的字库。把每个汉字转换成图形点阵字符串,然后用楼上的方式发送给打印机。 我执行倒Reset(FileToprint);就出错了,i/o错误,怎么回事? 我直接使用报表QuickReport输出报表,没有问题。 呵呵,原来就是CloseFile没有得缘故。笨 :) 我想把内容输出到文件[txt文件],然后打印该文件,如何改变字体?改变字体的大小其实是为了打印出来的字体大一点而已。有没有办法在程序里控制呢?如果可以改变字体,输出为别的格式也没关系 一般是用串口的,发送微打控制指令就可以了。http://218.56.11.178:8020/web/index.aspx->下载基地->例程-硬件控制->串口通讯控制器 ->控件-硬件控制->TurboPower Async Professional 微机打印哦,那里有lpt口哦,用COM发送,怎么作啊. 对啊,不知谁 有解决字体大小的问题呢我以前用报表作打作,在98可以,可2000不行了,所有的报表纸张大小在程序中设完后,2000不承认,以上代码中CloseFile(outputfile)。不必了因我在函数中已 有了呀CloseFile(FileToPrint);所以不必再关必一次 这个问题好像大家解决得差不多了,我就不插嘴了,最近我也做这个东西,是直接打印的,控制钱箱时没反应,大家遇到过吗?钱箱是打印机驱动的Var F:TextFile;PDStr:string;begin AssignFile(F, 'LPT1'); Rewrite(F); //初始化 PDStr:=chr(27)+chr(64); Write(F, PDStr); //开钱箱 PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255); Write(F, PDStr); CloseFile(F); Timage如何画高dpi的图片 遍历XML的一个子节点,然后判断是否能和另一个字符串匹配 遍历ftp地址下的文件夹并获取修改时间 TOleContainer绑定Excel问题 delphi中如何打开.udl文件对话框 求 超市计费系统思路! 请叫一个结取涵数? 一个关于TXMLDocument的问题 菜鸟的问题但又没人回答!在线等待急呀?!!!!!!!!!!!!!! 高手请看,dbgrid的问题 多服务器上表保持一致的问题,200分求救,在线等待! 土土的问:调试程序时,如何查看sql里各个变量的当前值?
procedure TPosFrm.PrintFile(AFileToPrint: string);
var
Port, FileToPrint: TextFile;
ALine: string;
begin
AssignFile(FileToPrint, AFileToPrint);
Reset(FileToprint);
AssignFile(Port, 'LPT1');
Rewrite(Port);
while not Eof(FileToPrint) do
begin
Readln(FileToPrint, ALine);
Writeln(Port, ALine);
end;
CloseFile(Port);
CloseFile(FileToPrint);
end;
// 打印小单
// 输出到文本,稍后再输出到LPT1端口;
OutFile:=ExtractFilePath(Application.ExeName)+'output.txt';
AssignFile(F, OutFile);
Rewrite(F);
CompanyTitle:=SysParms.CompanyTitle+'购物清单';
CompanyTitle:=StringOfChar(' ', (32-Length(CompanyTitle)) div 2)+CompanyTitle;
Writeln(F, CompanyTitle);
Writeln(F,'--------------------------------');
// Writeln(F,'收银机:'+EdPosID.Text+' 单号:'+EdSaleID.Text);
// Writeln(F,'收银员:'+EdOpID.Text+ ' 日期:'+EdSaleDate.Text);
Write(F,'收银员:', Format('%-10s', [STOpID.Caption]));
Writeln(F, '单号:'+STSaleID.Caption);
Writeln(F,'日期:'+STSaleDate.Caption+ ' 时间:'+FormatDateTime('hh:mm:ss', Now));
Writeln(F,'--------------------------------');
// 12345678901234567890123456789012
Writeln(F,'商品名称 数量 单价 金额'); ADSSaleList.DisableControls;
ADSSaleList.First;
while not ADSSaleList.Eof do
begin
MerName:=ADSSaleList.FieldValues['MerName'];
len:=Length(MerName);
if len < 18 then
MerName:=MerName+StringOfChar(' ', 18-len);
if (len mod 2) = 0 then
Write(F, Copy(MerName, 1, 18))
else
Write(F, (Copy(MerName, 1, 17)+' '):18);
Write(F, ADSSaleList.FieldValues['Qty']:2);
Write(F, FormatFloat('0.0', ADSSaleList.FieldValues['Price']):6);
Writeln(F, FormatFloat('0.0', ADSSaleList.FieldValues['Amount']):6);
ADSSaleList.Next;
end;
ADSSaleList.EnableControls; Writeln(F,'--------------------------------');
Writeln(F,'合计:',STHj.Caption:8, ' 让利:', STRl.Caption:8);
Writeln(F,'实收:',STSs.Caption:8, ' 金卡:',
FormatCurr('0.00', CardPayment):8
);
Writeln(F,'现金:',
FormatCurr('0.00', StrToCurr(EdCash.Text)-CardPayment):8,
' 找补:', STBack.Caption:8
);
Writeln(F,' '); //空行,添加或减少空行即可控制出纸多少。
...
PrintFile(Outfile); // 输出文件到打印口 输出如下例: XX化妆品世界购物清单
--------------------------------
收银员:01 单号:000000329
日期:2003-07-16 时间:17:53:28
--------------------------------
商品名称 数量 单价 金额
8g华美健强力消痘乳 4 16.0 64.0
小口红 1 5.0 5.0
180g隆力奇蛇胆不紧 3 20.8 62.4
速效脱毛露 2 7.5 15.0
美容海藻面膜 3 18.0 54.0
蕾琪唇彩 1 12.0 12.0
.....
--------------------------------
合计: 2058.40 让利: 0.00
实收: 2058.40 金卡: 0.00
现金: 2100.00 找补: 41.60
因宽度只有58mm,故商品名切去部分。
调试的时候发现,一直通不过,后来才发现.....那里把CloseFile(outputfile)给省略了。
现在终于可以了。:-)
想要用上面程序的朋友,记得加上CloseFile(outputfile)。
// 向LPT口打印一个文本文件
procedure TPosFrm.PrintFile(AFileToPrint: string);
var
Port, FileToPrint: TextFile;
ALine: string;
begin
AssignFile(FileToPrint, AFileToPrint);
Reset(FileToprint);
AssignFile(Port, 'LPT1');
Rewrite(Port);
while not Eof(FileToPrint) do
begin
Readln(FileToPrint, ALine);
Writeln(Port, ALine);
end;
CloseFile(Port);
CloseFile(FileToPrint);
end;这段程序?不然程序无响印了.
楼上大侠,如果小票打印机是没有带硬字库的怎么打呢?如EPSON 210PD。
有两种方式:一是利用驱动,这样的话,楼上的方式就不行了,必须是利用windows打印。需要利用windows打印函数,或者报表工具来打印。
二是采用图形方式打印,利用windows自带或者ucdos带的字库。把每个汉字转换成图形点阵字符串,然后用楼上的方式发送给打印机。
用COM发送,怎么作啊.
我以前用报表作打作,在98可以,可2000不行了,所有的报表纸张大小在程序中设完后,2000不承认,以上代码中CloseFile(outputfile)。不必了
因我在函数中已 有了呀CloseFile(FileToPrint);
所以不必再关必一次
Var F:TextFile;
PDStr:string;
begin
AssignFile(F, 'LPT1');
Rewrite(F);
//初始化
PDStr:=chr(27)+chr(64);
Write(F, PDStr);
//开钱箱
PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255);
Write(F, PDStr);
CloseFile(F);