在调用LPT上遇到了三个小问题:
1、怎么样去判断电脑上LPT是否可用,网上找了很多,没有一个可以解决;
2、打文字类的可以打,但是如果要打印条码呢?
3、打印机有自动切纸功能,怎么样去调用这个功能呢?打印机是EPSON tm-t86l的

解决方案 »

  1.   

    1.使用winio可以与LPT端口上的设备进行交互
    2.需要查一下打印机的命令手册,ESC命令可以直接实现常用条码打印,特殊条码,需要用打印的ESC命令控制它,使之进入位图模式,根据你的要求打印任意图形;
    3.切纸命令也是一个ESC命令,命令手册上可以查到的,包括半切、全切什么的,都能控制的。
      

  2.   

    兄台,小弟还有一事不明就是这个chr($1B)   chr($65)   chr(2)   是什么意思,我看还有很多类于这个的,还有,在打印的时候怎么样控制字体的大小以及样式
    最好能给我一个实体,不然我理解不了,谢谢兄台
      

  3.   

    ESC命令集,是Epson开发的一套语言(为了便于你理解,用了这个词),计算机通过这一语言向打印机下达命令,打印机根据得到的命令执行相应的操作。chr($1B) 就是ASC码为16进制1B的那个字符(这个是不可见字符,是ESC命令的起始符),通常的ESC命令,都是以1B开始,然后后面跟着1或多个字节来表示让打印机干什么比如,要让打印机把字符ABC加大一号打印,假设ESC命令是1B 65 02(控制加大的不一定是这个序列,只是举例),那就先向打印机发送这三个字符,然后再发送要打印的字符ABC。ESC命令需要查相应型号打印机的手册的,不同型号打印机,同样的操作动作,可能ESC命令是不一样的。特别是一些专用打印机。
      

  4.   

    兄台,小弟还有一事不明,望指教,在WriteFile怎么样去使用这个ESC命领,比如ESC中这个 GS V    1D   56   m    走纸到切纸位置,那我该怎么使用呢??
      

  5.   


    var
            f: TextFile;
    begin
            Assignfile(f,'LPT1');
            rewrite(f);
            write(f,#$1b'@');      //初始化打印机
             closefile(f);
    end;
    用法如上GS V 1D 56 m 手上没有手册,按的印象"GS”就象书上写的"ESC"一样,都是一个字符,ESC是$1B,GS是啥你自己查一下,m似乎是这变量,大概的意思是控制半切,全切的一个数
    比如GS是$1D,全切是0,对应的输出语句是:
    write(f,#$1D'V'#$1D#$56#$0);
    或者写成
    write(f,chr($1d)+'V'+chr($1d)+chr($56)+chr(0));
    两种写法是一个意思的。
      

  6.   

    网上查了一下,你那么写把我搞晕了
    GS V                                 走纸到切纸位置格式:① ASCII: GS    V   m十进制: 29   86   m十六进制: 1D   56   m② ASCII: GS    V   m   n十进制: 29   86   m   n十六进制: 1D   56   m   n说明:①m=1,49。②m=66,0≤n≤255M    解       释1,49    部分切纸(无切刀则无切纸动作)66    走纸到(切纸位置+n×1/144英寸)位置并部分切纸(无切纸刀则无切纸动作)说得很清楚了,2种用法,一种是GS V m 一种是GS V n m
    我记得我原来切纸用的是
    write(f,#$1d'V'#0)
      

  7.   

    ①m=1,49。②m=66,0≤n≤255这个的意思是m=1或m=49表示部分切纸,当前位置直接切如果m=66,则要带入走纸距离n ,即再出一部分纸后,再切
      

  8.   

    兄台,我想问下我是在一张宽8cm高6cm的纸张打印,代码如下
        Assignfile(f,'lPT1');
       rewrite(f);
       Writeln(F,chr(27)+chr(64));  //初始化打印机
       Writeln(F,Char(27)+char(33)+char(16));//设置字体
       Writeln(f,Edit1.text+Edit2.text+Edit3.text);
       Writeln(F,Char(27)+char(33)+'0');
       Writeln(f,'  票价 ¥20.00   服务费 ¥0.00         ') ;
       Writeln(f,'  总计 ¥20.00           ');
       Writeln(f,'   ' );
       Writeln(f,'   ' );
       Writeln(F,chr($1d)+ 'V'  +char(66)+chr(30));  //切d纸
    为什么每次打印都会到纸中间去打,不能置顶或者是在上去一点打印呢?
      

  9.   

    但是这个明显浪费比较多了,高只有6CM,打印却从3CM打,彩票也不会从中间打的啊
      

  10.   

     Writeln(F,Char(27)+char(33)+char(16));//设置字体
    这句干什么的?仿佛是设置行高为倍高了另外,需要换行的才用writeln,否则用write
      

  11.   

    Writeln(F,Char(27)+char(33)+char(16))是设置字体大小,这句话屏过,但是不会影响打印开始的地方,也就是说有与没有并不影响从中间打印。
      

  12.   

    初始化打印和设置字体那2行,都不需要用writeln,要用write(f,....)
      

  13.   

    已经更改过,效果还是这样的。还有兄台,ESC中的条码到底是怎样表示的呢,我看了半天ESC上的也看不懂,网上也没有这种示例,急啊。
      

  14.   

    我把以前代码找出来看了下,没什么设置,没出现你说的情况                Assignfile(f,'LPT1');
                    rewrite(f);
                    write(f,#$1b'@');      //初始化打印机
                    write(f,#$1b'3'#49);   //49/144inch
                    write(f,#$1d#$4c#1#0);//左边20个点开始打印
                    write(f,#$1d#$57#100#2);//最大612个点
    后面是打一张图,然后就是切纸了。我这个是直接用的彩票机上拆下来的热打,出厂的时候做过什么非常规的设置,不得而知。另,条码部分一直没用过,手上也没有ESC的参考资料,可能帮不了你,印象中是可以打的。
      

  15.   

    兄台,已经试过还是不行,条码我找过了,官网有提示分别为
    GS H n //HRI
    GS f n //HRI字体
    GS h n //条码高度
    GS w n //条码最小单位宽度
    GS k m… //打印条码
    可是还是不能打。还有非常谢谢你这两天来对我的帮助,非常谢谢。学会了不少东西。待会我就给分
      

  16.   

    你试下这个UPC-A
    write(f,#$1d#$6b#0);
    write(f,'098765432198'#0#$A); //12位数据每种类型的条码,其数据部分都是有长度要求的,如果你打印的数据长度不符,可能不会给打出来的