// 支持开钱箱的打印机有EPSON 210PD/220、STAR POS58、DIY-POS POS58N function openmoneybox:boolean; // 开钱箱 Epson210D+D7+Win2k测试通过 Var F:TextFile; pdStr:string; pport:string; // 打印机端口,开钱箱端口 prin:string; // 打印机类型 cd:string; begin cd:=trim(sini.ReadString('Pos','use_pos_pd_led_omb','')); // 使用客显开钱箱 if cd='1' then // // diy 川田客显开钱箱,使用客显开钱箱 begin pdstr:=chr(2)+chr(77); // {控制顾客显示屏开钱箱指令} com_send(Pchar(PDStr),Length(PDStr)); exit; end; try pdStr:=Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255); // 开钱箱 在win2000下,TP POS58 // pdstr:=chr(27)+chr(112)+chr(0)+chr(60)+chr(255); // 在DOS下开钱箱 RP-POS58NL-P、RP-POS58NS-P、EPSON 210、TP-POS58 // CHR(27)+"p"+CHR(07); // Star SP312 (Receipt)->Star SP2000系列的打印机 pport:=sini.readstring('Pos','posprinterport',''); // 打印机端口 prin:=sini.ReadString('Pos','posprintertype',''); // 打印机类型 if prin='STAR SP2000兼容针打' then pdstr:=CHR(27)+chr(112)+CHR(07); // Star SP312 (Receipt)->Star SP2000系列的打印机 // STAR SP2000兼容针打 assignFile(F, 'LPT1'); // assignfile(f,pport); Rewrite(F); Write(F,pdStr); CloseFile(F); Except application.messagebox('对不起,打开钱箱失败,请检查[打印机类型或设置]!'+#13+#13+ '系统提示:请先检查[打印机是否没纸或打印机连接线]!', pchar(syscaption),mb_ok+mb_iconerror); End; end; 通用: 其实开钱箱是有几种,一:通过钱箱卡来驱动 二:通过打印机 三:通过顾显 四:通过主板接口,每种都不一样,以下是通过打印机来驱动的: var F:TextFile; pdStr:string;开钱箱指令 begin pdStr:=#27+#112+#0+#100+#100; //很通用 assignFile(F, 'LPT1'); Rewrite(F); Write(F,pdStr); CloseFile(F); end; 转:pos软件打印及开钱箱 PowerBuilder下使用并口控制打印机 使用PowerBuilder编程的人员如果需要在Windows下使用并口打印机逐行打印,而又不想使用Windows的驱动程序。我们这里提供一种不需要任何外来的元件的方法。 integer li_FileNum String PDStr li_FileNum = FileOpen("LPT1",LineMode!, Write!, LockWrite!, Append!) PDStr=”PowerBuilder Printer on LPT1” FileWrite(li_FileNum,PDStr) FileClose(li_FileNum) 如果需要控制并口的POS58打印机开钱箱,使用以上方法是不可打开的,因为PowerBuilder会把chr(0)认为毫无意义而给屏蔽掉,所以就只有使用调用外部文件的方法来实现。把附带的OpenLptDoor.exe文件复制到程序的目录下,然后在PowerBuilder下调用以下语句就可以打开了,其实该文件执行的指令就是Chr(27)+”p”+Chr(0)+Chr(60)+Chr(255): Run("OpenLptDoor.exe") 如果OpenLptDoor.exe文件保存在别的位置,就要在调用语句中加入文件存放路径。 PowerBuilder环境下控制串口顾客显示屏 使用PowerBuilder编程的人员如果需要在Windows下使用串口控制顾客显示屏或串口打印机,就需要使用外来方式。我们这里提供了API_COM.DLL这个链接库供调用。 首先把API_COM.DLL文件复制到编写的源程序目录下,接着在程序中声明调用的三个函数: 1、 打开源程序,然后选择下拉菜单“Declare”,接着从菜单中选择“Local External Functions”。 2、 此时出现“Declare Local External Functions”窗口,在窗口中输入如下内容: function Boolean com_init(Int com,int baud)library "api_com.dll" function Boolean com_rest() library "api_com.dll" function Boolean com_send(string buf,int len)library "api_com.dll" 按“OK”以后即对函数声明完毕。 3、 现在就可以在程序中调用函数了。首先打开窗体的脚本编辑器,选择“show”事件,写入如下内容,该内容表示窗体显示时打开端口: if not com_init(1,2400) then messagebox("错误","COM1打开错误!",exclamation!) end if 4、 接着选择“close”事件,写入如下内容,该内容表示窗体关闭时关闭端口: com_rest(); 5、 现在可以返回主窗体了,在窗体上增加一个按钮,打开该按钮的脚本编辑器,写入如下内容: string PDStr PDStr=Char(27)+Char(81)+Char(65)+"1234.56"+Char(13); com_send(PDStr,Len(PDStr)) 6、 按照如上操作,就可以向串口发送显示数字的指令了,如果需要实现其他的功能,只需要对PDStr进行赋值就可以了。 下面是控制顾客显示屏显示“总计”灯的命令: PDStr=Char(27)+Char(115)+”2” 该代码还可以控制POS58打印机打印,给PDStr如下赋值就开始打印了: PDStr=”PowerBuilder Printer on COM1”+Char(10) 使用打印开钱箱: Chr(27)+”p”+Chr(0)+Chr(60)+Chr(255) 使用调用外部文件的方法来实现。把附带的OpenLptDoor.exe文件复制到程序的目录下,自定义打印按扭: Report(...)andRun(docdir +"OpenLptDoor.exe") 1、控制POS机的客户显示屏 procedure TFrmMain.ShowMoney(Money_Port: String;Money_String:String); //Moneey_Port 顾显接口Com1 or Com2 Money_String 顾显显示的内容 var PrnFileName:TextFile; begin Assignfile(PrnFileName,Money_Port); printer.Canvas.Font.Name:='宋体'; printer.Canvas.Font.Size:=8; printer.Canvas.Font.Charset:=GB2312_CHARSET; Rewrite(PrnFileName); write(PRNFileName,chr(12)); //清除顾显 write(PRNFileName,chr(27)+chr(81)+chr(65)+Money_String+chR(13)); //显示信息 CloseFile(PRNFileName); end; 2、不换页走纸的打印 procedure TFrmMain.AddPrintStrings(Strings: TStrings); var Prn: TextFile; i: word; begin Assignfile(Prn,'lpt1'); printer.Canvas.Font.Name:='宋体'; printer.Canvas.Font.Size:=9; printer.Canvas.Font.Charset:=GB2312_CHARSET; try Rewrite(Prn); try for i := 0 to Strings.Count - 1 do writeln(Prn, Strings.Strings[i]); finally CloseFile(Prn); end; except on EInOutError do MessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATION or MB_OK); end; end; 3、走纸换页的打印 procedure TFrmMain.PrintStrings(Strings: TStrings); var Prn: TextFile; i: word; begin AssignPrn(Prn); try Rewrite(Prn); printer.Canvas.Font.Name:='宋体'; printer.Canvas.Font.Size:=9; printer.Canvas.Font.Charset:=GB2312_CHARSET; try for i := 0 to Strings.Count - 1 do writeln(Prn, Strings.Strings[i]); finally CloseFile(Prn); end; except on EInOutError do MessageBox(Handle,PChar('文本打印出错!'),'警告',MB_ICONEXCLAMATION or MB_OK); end; end; 4、打开钱箱 procedure TFrmMain.OpenMoneyBox; Var F:TextFile; PDStr:string; begin //弹出钱箱功能 PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255); AssignFile(F, 'LPT1'); Rewrite(F); Write(F, PDStr); CloseFile(F); end; 总结:以上代码经过测试通过。 开钱箱 buffer = 'CHR(27)+ 'p '+CHR(0)+CHR(20)+CHR(255) '; Assignfile(PrnFileName, 'LPT1 '); try Rewrite(PrnFileName); write(PRNFileName,buffer + #13#10); finally CloseFile(PRNFileName); end; 打印票据 buffer = '打印内容 '; Assignfile(PrnFileName, 'LPT1 '); try Rewrite(PrnFileName); write(PRNFileName,buffer + #13#10); finally CloseFile(PRNFileName); end; 如果我先打印在开钱箱就好使,否则就象死掉了一样,那为什么呢? //Delphi下使用并口控制打印机 //打开钱箱的代码 2008年01月10日 星期四 15:38 Delphi下使用并口控制打印机 使用Delphi编程的人员如果需要在Windows下使用并口打印机逐行打印,而又不想使用Windows的驱动程序。我们这里提供一种不需要任何外来的元件的方法。 Var F:TextFile; Str:string; Begin try Str:=’ 欢迎使用票据打印机!’+Chr(10); AssignFile(F, 'LPT1'); Rewrite(F); Write(F, Str); CloseFile(F); Except Messagedlg('数据发送失败!',mterror,[mbok],0); End; end; 如果需要控制并口打印机开钱箱,也只需要重新给Str如下赋值: Str:= Chr(27)+'p'+Chr(0)+Chr(25)+Chr(255); Delphi下使用串口控制打印机 使用Delphi编程的人员如果需要在Windows下使用串口控制顾客显示屏或串口打印机,就需要使用外来方式。我们这里提供了API_COM.DLL这个链接库供调用。 首先把API_COM.DLL文件复制到编写的源程序目录下,接着在程序的开头声明调用的三个函数来源: var Form1: TForm1; {加入下面三行声明} function com_init(com:Integer; baud:Dword):Boolean;stdcall;external 'api_com.dll'; function com_rest:Boolean;stdcall;external 'api_com.dll'; function com_send(buf:PChar; len:Integer):Boolean;stdcall;external 'api_com.dll'; implementation {$R *.DFM} Com_init(1,9600)是打开串口进行通讯,1是打开COM1,波特率为9600。如果打开成功,它会返回逻辑真告知串口打开。 Com_rest是关闭串口。 Com_send(命令,长度)是发送数据到串口。 {在窗体创建时打开端口} procedure TForm1.FormCreate(Sender: TObject); begin Com_init(1,9600); end; {在按钮中发送内容} procedure TForm1.Button1Click(Sender: TObject); begin Str=Chr(27)+Chr(112)+Chr(0)+Chr(25)+Chr(255);{控制打印机开钱箱指令} if com_send(Pchar(Str),Length(Str)) then begin Label1.Caption :='已经发送命令'; end else begin Label1.Caption :='发送失败'; end; end; {在关闭窗体时关闭端口} procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Com_rest; end; 上面语句是控制打印机开钱箱命令,其他的命令集只需要改变按钮中的Str的值即可: 下面是控制打印机打印出“欢迎使用GP系列票据打印机!”的命令: Str=’欢迎使用GP系列票据打印机!’+Chr(13) if com_send(Pchar(Str),Length(Str)) then begin Label1.Caption :='已经发送命令'; end else begin Label1.Caption :='发送失败'; end; 部分特殊打印机 评论这张 转发至微博 0人 | 分享到: 阅读(127)| 评论(0)| 引用 (0) |举报 数据集处理成可视树,数据网格自动适应宽度 在delphi中如何发送打印机控制码? 历史上的今天 相关文章 C#枚举系统安装的所有打印机2010-02-19 01:23:31 vb.net直接控制并口打印机的两种方法2010-04-28 00:56:56 直接把结果输出到打印机2010-05-21 16:55:26 用宏给打印机“记工”2010-06-08 18:37:15 取得网络上的打印机2010-04-07 21:24:12 最近读者 登录后,您可以在此留下足迹。 fairyhoo kingmous 评论 点击登录|昵称: 取消 验证码:换一张 上一页 1... -1-1-1-1-1-1-1... -1下一页 我目前用的是川田POS58的,指令是这样的: 使用Delphi编程的人员如果需要在Windows下使用并口打印机逐行打印,而又不想使用Windows的驱动程序。我们这里提供一种不需要任何外来的元件的方法。 Var F:TextFile; PDStr:string; Begin try PDStr:=’Delphi Printer on LPT1’+chr(10); AssignFile(F, 'LPT1'); Rewrite(F); Write(F, PDStr); CloseFile(F); Except Messagedlg('数据发送失败!',mterror,[mbok],0); End; end; 如果需要控制并口的POS58打印机开钱箱,也只需要重新给PDStr如下赋值: PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255); http://www.sddbbs.net/bbs/dispbbs.asp?boardID=89&ID=1707 【分享】POS钱箱的安装方法及零售单开钱箱指令设置 钱箱类型比较多,它的接口也有较大区别,有的类似电话线接头的,有的只有两根电线,有的是COM口的,也有的是LPT口的,安装与连接方法也有所不同,软件驱动方式也不一样。 常见的钱箱是与票据打印机一起使用的,一般票据打印机的背面都有钱箱的驱动接口,将钱箱的RJ11接头(类似电话线接头)连接到票据打印机背面的驱动接口,一般票据打印机是连接在COM口或LPT口上的,然后通过软件向COM或LPT口发送信号,这样就可以打开钱箱了; 一般票据打印机的钱箱的驱动指令是通过票据打印机来发送的,跟钱箱没有关系,票据打印机的供应商会提供给您该型号打印机的驱动钱箱指令说明,您再将该指令加入您的POS前台软件里即可。 驱动指令有使用十六进制的,也有十进制的,也有ASCII代码的,在下面的例子中将把这三种数据表达形式对应关系列示出。 如:STAR票据打印机接在LPT1口中,驱动指令是: 进制 指令 开钱箱指令 十六进制 1B 70 7 CHR(0x1B)+ CHR(0x70)+ CHR(0x7) 十进制 27 112 7 CHR(27)+ CHR(112)+ CHR(7) ASCII代码 ESC p CHR(27)+'p'+ CHR(7)