我用的是POS58小票据打印机, 怎样才能检测到打印机没纸和缺纸的控制。打印机没准备好(xinfei)(50分)

  • 主题发起人 主题发起人 my_first
  • 开始时间 开始时间
M

my_first

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,谢谢各位,  
 
该怎样控制
 
我已经发出去了两个贴子,都无人回答,而且比这个简单,呜,高手跑到哪里去了,
 
在代码里嵌入一段汇编语言可以解决问题,但是只能在win98下运行,具体代码忘了,不过我
是查离线阅读器查出来的。你可以查查,好象是hubdog回答的。
 
function PrinterStatus : integer;

asm
mov ah, 2 // function 2 - returns status of port
mov dx, 0 // lpt1 = 0, lpt2 = 1 etc
int $17 // status in ah
mov al, ah
and eax, $FF // status now in eax with top 24 bits cleared
end;



const
PrinterCodes : array [0..7] of string =
('printer timed-out',
'unused',
'unused',
'I/O error',
'printer selected',
'out of paper',
'printer acknowedgment',
'printer not busy');


procedure TForm1.Button1Click(Sender: TObject);

var
L,P : integer;

begin

P := PrinterStatus;
//status of printer in P
ListBox1.Clear;

for L := 0 to 7do

if P and (1 shl L) <> 0 then

ListBox1.Items.Add (PrinterCodes [L]);

end;

 
to hnzgf 谢谢你,我试试, 你这是 POS58的吗?
 
to hnzgf 如果这个问题解决了, 我愿出一百元请您吃饭。 绝不食言。 
我现在运行程序,下面这些分别是什么意思。
PrinterCodes : array [0..7] of string =
('printer timed-out',    //打印机超时
'unused', //正在用... 这儿多了一个'unused'
'unused',
'I/O error', // i/o出错 
'printer selected',   //选择了打印机
'out of paper', //没纸
'printer acknowedgment',
'printer not busy');
//空闲

是这些吗?
 
 
我在公司用的是star 300票据打印机,不过我想通过汇编语言得到状态都是一样的,即没有
打印机的区别,你可以再查查离线资料,我现在不在公司,不然可以把我的代码给你!
 
上面是建立了一个数组,你可以把上面这些情况都写上去吗,好象缺纸和卡纸都是IO Error
的状态
 
你的这段代码分别是代表什么意思
PrinterCodes : array [0..7] of string =
('printer timed-out',    
'unused',
'unused',
'I/O error',
'printer selected',  
'out of paper',
'printer acknowedgment',
'printer not busy');
 
看看这个,应该有用
http://www.delphibbs.com/delphibbs/dispq.asp?lid=232399
 
怎么样,看到hubdog高手的回答了吧!他的那个 TPrinterStatus挺好用,我就是那么用
的,不过我没有register,只选用了里面的一部分代码!·
 
function PrinterStatus : integer;

asm
mov ah, 2 // function 2 - returns status of port
mov dx, 0 // lpt1 = 0, lpt2 = 1 etc
int $17 // status in ah
mov al, ah
and eax, $FF // status now in eax with top 24 bits cleared
end;



const
PrinterCodes : array [0..7] of string =
('printer timed-out',
'unused',
'unused',
'I/O error',
'printer selected',
'out of paper',
'printer acknowedgment',
'printer not busy');


procedure TForm1.Button1Click(Sender: TObject);

var
L,P : integer;

begin

P := PrinterStatus;
//status of printer in P
ListBox1.Clear;

for L := 0 to 7do

if P and (1 shl L) <> 0 then

ListBox1.Items.Add (PrinterCodes [L]);

end;


这段代码你测试通过了吗? 缺纸和卡纸都是i/o错误 ? 我在这里测试, 我故意把纸
拿下来,他就报'out of paper', 没有报i/o出错.
 
sorry,myfirst!我用的是hubdog贴出的代码,就是那个TPrinterStatus类。
你可以是是那个,我现在不在公司,没有编译环境,没有办法给你试。在hubdog代码的基础
上你可以调整一下,比如不用防到component palete上等。
祝你好运!
 
to hnzgf 我现在最重要的一个问题是, 票据打印机的纸是一卷一卷的,不像其它的一张一张
的, 所以把印到最后最后剩一点点纸的时候, 我指的是还剩一点点纸,便实际是要打印的
东西往往不止这么一点点。 比这点纸要多。 

怎样检测当纸走不动,时出错。 卡纸。 我用你给我的这段代码可以检测出没纸。 但
卡纸就检测不出来。 
 
多人接受答案了。
 
卡纸是IO Error吧 ,我记着在Star 300下我是这么用 的
 
我把纸按住不让其动, 它还照常打印,全都打在一起
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部