关于使用打印机指令?(100分)

  • 主题发起人 主题发起人 weiyuan99
  • 开始时间 开始时间
W

weiyuan99

Unregistered / Unconfirmed
GUEST, unregistred user!
在CB(Delphi)如何发送和获取打印机指令?
下面是一段打印机编程手册文档:
LF
[名称] 打印并走纸一行
[格式] ASCII LF
Hex 0A
Decimal 10
[描述] 打印缓冲区内数据并走纸一行。
[注释] 该指令将当前位置置于行首。
[参考] ESC 2, ESC 3
 
如何获取打印机返回状态?
 
我也正在做这个
好象是通过串口直接发送打印指令,正在研究
楼主解决了不要忘了告诉我,帮你顶!
 
我做过star的小票打印机程序,下面是代码,希望对你们有所帮助
assignfile(f,'lpt1:');
try
rewrite(f);
writeln(f,chr(27)+chr(112)+chr(0)+chr(50)+chr(200));//初始化
rewrite(f);
writeln(f,#27#64+'停车收费单');
writeln(f,#10'卡号:'+LabCardNo.caption);
writeln(f,'进入日期:'+LabInDate.caption);
writeln(f,'进入时间:'+LabInTime.caption);
writeln(f,'离开日期:'+LabOutDate.caption);
writeln(f,'离开时间:'+LabOutTime.caption);
writeln(f,'共停车:'+LabHour.caption+' '+LabMin.Caption);
writeln(f,'停车费:'+labfee.caption+#10#10#10#10#10#10);
finally
closefile(f);
end;
 
VAR
lpt :TextFile;
begin
AssignFile( lpt, 'LPT1' );
ReWrite( lpt );
Write( lpt, '打印测试' );
Write( lpt, #10 );
//打印机换行
CloseFile( lpt );
end;

参照上面给的例子,我来给你解释
就你上面给的那个格式吧
LF (换行命令)
--------------------
格式: ASCII :LF
十进制 :10
十六进制:0A
----------------------
在Delphi中就是这样写
Write( lpt, #10 );
其中 #10就是指令部分了(也就是十进制部分)
也可以写成这样
Write( lpt, chr(10) );

再比如条形码的指令(不一定每个打印机都可以打)
  ASC II: Fs p n s h m k d1
  十进制码: 28 80 n s h m k d1
  十六进制码: 1C 50 n s h m k d1 d2
其中那些 n s h为某些指定的值,具体看说明书了
这样写
Write( lpt, CHR(28)+CHR(80)+CHR(1)+CHR(2)+CHR(2)+CHR(3)+CHR(12)+'012345678901');
 
首先谢谢limpid_eyes和CPU风扇
我想请问 [CPU风扇]
你的分析我都看懂了,谢谢
我的打印机是占用com1的,该怎么写。
 
如果是COM1:
VAR
lpt :TextFile;
begin
AssignFile( lpt, 'COM1' );
ReWrite( lpt );
Write( lpt, '打印测试' );
Write( lpt, #10 );
//打印机换行
CloseFile( lpt );
end;
其实我用过以上代码,感觉还是不怎么好,其实是将端口模拟为文件操作。
我一般是直接发命令到端口。
 
duancy:
我试过直接把打印指令发送到com1口,可是当我调试一打开端口的时候,系统就提示端口已经被其他程序占用。不知道是什么原因。而只有条码打印机是用的com1。能帮我看看代码吗?
procedure TForm1.FormCreate(Sender: TObject);
begin
try
Comm1.CommName:='com1';
comm1.StartComm;
except
ShowMessage('串口初始化失败!');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var str string;
begin
str:='<STX>L';
WriteCom(str);
end;
 
哇,
唯一的一个机会啦,
AssignFile(YourFile, 'Com1');
//FileName用端口就OK 象上面的'Lpt1'打印口啦
不一定所有的打印机支持'ESC/POS'指令集哦,
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
COM1,COM2,LPT这些都是关键字。LPT和COM的用法基本上都是一样的
如果你的硬件以及设置没问题的话,LPT1改称COM1(你的打印设备是否用COM1?或者COM2 ?),这样是应该可以打印东西出来的
 
或者留下E-MAIL,我发个DEMO给你,可以操作LPT1,COM1,COM2....
但是只能在WIN9X下使用.
 
发个给我
zhanglin@guardait.com
谢谢!
 
能给我一个吗?vickymade@163.com。先谢谢了。小弟我也是急需呀。
 
VAR
lpt :TextFile;
begin
AssignFile( lpt, 'LPT1' );(LPT1/COM1/COM2)
ReWrite( lpt );
Write( lpt, '打印测试' );
Write( lpt, #10 );
//打印机换行
CloseFile( lpt );
end;
 
谢谢各位大哥的指导,我再试试!
 
后退
顶部