- // 支持开钱箱的打印机有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)
-
-
|