zoukankan      html  css  js  c++  java
  • delphi LPT1端口打印与开钱箱

    {设置打印机}
    Assignfile(RPrinter,'LPT1');

    {准备写文件}
    Rewrite(RPrinter);

    {向后倒纸}
    //Writeln(RPrinter,chr($b)+chr(27)+'K'+chr(40));

     

    {打印}
    Writeln(RPrinter,'测试:****'+(Edit1.text));


    {向前进纸}
    Writeln(RPrinter,chr($b)+chr(27)+'J'+chr(140));

    {关闭打印机}
    CloseFile(RPrinter);


    delphi通过LPT1并口POS58小票打印机开钱箱见经常有人问如何开钱箱.就做了个非常简单的DEMO,中高手不要下了;
    只支持POS打印机带钱箱接口的钱箱;
    POS打印机 必须使用并口,及使用电脑的 LPT1 端口;


    procedure TForm1.Button1Click(Sender: TObject);
    var
    F:TextFile;
    pdStr:string;
    begin
        pdStr:=#27+#112+#0+#100+#100;//开钱箱指令
        assignFile(F, 'LPT1'); //端口自己改....
        Rewrite(F);
        Write(F,pdStr);
        CloseFile(F);
    end;

    *****************************************************

    Delphi下POS机控制钱箱,客显,打印机,小票打印
    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;
    \


    Delphi POS打印的处理

    2007年8月4日    delphi    小票打印

    {打印代码}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    RPrinter:TextFile;

    i:integer;

    begin

    {设置打印机}

    Assignfile(RPrinter,'lpt1');

    {准备写文件}

    Rewrite(RPrinter);

    {打印}

    for i := 0 to memo1.lines.Count - 1 do

    Writeln(RPrinter,memo1.lines[i]);

    {向后倒纸}

    Writeln(RPrinter,chr($b)+chr(27)+'K'+chr(40));

    {向前进纸}

    Writeln(RPrinter,chr($b)+chr(27)+'J'+chr(140));

    {开钱箱}

    writeln(f,CHR(27)+CHR(112)+CHR(0)+CHR(17)+CHR(8));

    write(f,CHR(27)+CHR(112)+CHR(0)+CHR(17)+CHR(8));

    Chr(27)+'p'+chr(0)+chr(60)+chr(255)

    {关闭打印机}

    CloseFile(RPrinter);

    end;

    建议看看Printers单元

    uses Printers,然后看看里面的函数

    1.POS软件是使用windows通用的端口打印方式进行打印命令输出的。

    2.也可直接调用POS打印机厂商所提供的函数库。(一般不推荐这种开发方式,因为打印机的品牌很多,每个打印机都需要编程)

    3.驱动打印,很少有软件采用,因为收款员的电脑操作能力差,无法对打印预览等窗口进行操作。而如果出现驱动方式的打印错误,就会出现打印等待的情况,而这样的错误有可能会影响到多笔的收款业务(多人交款,都不打小票),如果使用端口打印则不会有这种问题出现,出错就无法进行收款,重新启动计算机就可以,而避免了错误的重复发生。所以建议使用端口打印。

    热印打印知识

    Direct Thermal(热敏)

    --- 介质,多为纸质,覆盖一化学涂层,该物质经过热能作用一段时间后会变为深色。

    --- 图像不是由燃烧形成的,而是涂层在经过热能作用后发生化学反应而形成的。

    热敏打印的优点

    --- 有效的打印方法:只需要介质,无须碳带。

    --- 打印机操作相对地简单。

    --- 打印机噪音小,适合安静场合。

    --- 热敏打印速度快,最快可以达到200mm/sec。

    热敏的打印速度快,噪音低,热敏纸成本高,不能打印双联,一段时间后大约两个礼拜,打印的字会消失。

    针式打印速度慢,噪音相对大,成本低,可打印多联,字迹不容易消失。

    针式打印机比热敏打印机便宜。

    ----------------------------------------------------------------------------------------------------------

    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,2400)是打开串口进行通讯,1是打开COM1,波特率为2400。如果打开成功,它会返回逻辑真告知串口打开。
    Com_rest是关闭串口。
    Com_send(命令,长度)是发送数据到串口。

    {在窗体创建时打开端口}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Com_init(1,2400);
    end;

    {在按钮中发送内容}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    PDStr:=Chr(2)+Chr(77);{控制顾客显示屏开钱箱指令}
    if com_send(Pchar(PDStr),Length(PDStr)) then
    begin
    Label1.Caption :='已经发送命令';
    end
    else
    begin
    Label1.Caption :='发送失败';
    end;
    end;

    {在关闭窗体时关闭端口}
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Com_rest;
    end;
    上面语句是控制顾客显示屏开钱箱的命令,其他的命令集只需要改变按钮中的PDStr的值即可:
    下面是控制顾客显示屏显示1234.56的命令:
    PDStr:=Chr(27)+Chr(81)+Chr(65)+’1234.56’+Chr(13);
    if com_send(Pchar(PDStr),Length(PDStr)) then
    begin
    Label1.Caption :='已经发送命令';
    end
    else
    begin
    Label1.Caption :='发送失败';
    end;
    下面是控制顾客显示屏显示“总计”灯的命令:
    PDStr:= Chr(27)+Chr(115)+’2’;
    if com_send(Pchar(PDStr),Length(PDStr)) then
    begin
    Label1.Caption :='已经发送命令';
    end
    else
    begin
    Label1.Caption :='发送失败';
    end;
    如果需要控制串口的POS58打印机打印,也只需要重新给PDStr赋值:
    PDStr:=’Delphi Printer on COM1’+chr(10);
    要POS58开钱箱,则需要如下赋值:
    PDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255);

    http://blog.csdn.net/zisongjia/article/details/72639702

  • 相关阅读:
    AM335x kernel 4.4.12 i2c eeprom AT24c02驱动移植
    AM335x tscadc platform driver 相关代码跟踪
    Linux kernel make 常用选项介绍
    Linux kernel 文件夹说明
    shell 脚本之获取命令输出字符串以及函数参数传递
    Treeview控件如何获得子节点的所有父节点的名称
    浅谈Delphi高效使用TreeView
    Delphi下Treeview控件基于节点编号的访问
    delphi中TTreeView的使用方法
    学习 TTreeView [2]
  • 原文地址:https://www.cnblogs.com/findumars/p/5509801.html
Copyright © 2011-2022 走看看