Testar se impressora matricial está pronta para imprimir
:?: Caros colegas,
Estou usando Delphi 7 e gostaria de testar se a impressora matricial está On-Line.
Consegui uma função pela Internet, mas como usa ASM, não funciona mais no Delphi7.
Agradeço a ajuda dos colegas do forum,
Marcello
Estou usando Delphi 7 e gostaria de testar se a impressora matricial está On-Line.
Consegui uma função pela Internet, mas como usa ASM, não funciona mais no Delphi7.
Agradeço a ajuda dos colegas do forum,
Marcello
Marcello
Curtidas 0
Respostas
Renato Moura
22/02/2003
Function TForm1.PrinterOnLine : Boolean;
Const
PrnStInt : Byte = $17;
StRq : Byte = $02;
PrnNum : Word = 0; { 0 para LPT1, 1 para LPT2,
etc. }
Var
nResult : byte;
Begin
Asm
mov ah,StRq;
mov dx,PrnNum;
Int $17;
mov nResult,ah;
end;
PrinterOnLine := (nResult and $80) = $80;
end;
Utilize a função assim:
procedure TForm1.Button1Click(Sender: TObject);
begin
If not PrinterOnLine then ShowMessage(´Verifique
a Impressora!´);
end;
Funcao estraida do site Guiadodelphi.com.br....
Espero ter ajudado.
Const
PrnStInt : Byte = $17;
StRq : Byte = $02;
PrnNum : Word = 0; { 0 para LPT1, 1 para LPT2,
etc. }
Var
nResult : byte;
Begin
Asm
mov ah,StRq;
mov dx,PrnNum;
Int $17;
mov nResult,ah;
end;
PrinterOnLine := (nResult and $80) = $80;
end;
Utilize a função assim:
procedure TForm1.Button1Click(Sender: TObject);
begin
If not PrinterOnLine then ShowMessage(´Verifique
a Impressora!´);
end;
Funcao estraida do site Guiadodelphi.com.br....
Espero ter ajudado.
GOSTEI 0
Dor_poa
22/02/2003
Verificando se a impressora está ativa
Na sua unit, faça a chamada abaixo:
While not PrinterOnline() do
begin
MsgBox(´Verifique a Impressora!´,´ATENÇÃO´);
end;
Function PrinterOnLine : Boolean;
Const
PrnStInt : Byte = $17;
StRq : Byte = $02;
PrnNum : Word = 0; { 0 para LPT1, 1 para LPT2, etc. }
Var
nResult : byte;
Begin (* PrinterOnLine*)
Asm
mov ah,StRq;
mov dx,PrnNum;
Int $17;
mov nResult,ah;
end;
PrinterOnLine := (nResult and $80) = $80;
End;
********************************************
A interrupção $17 utiliza dois registros ah e dx, o registrador ah indica neste caso o acesso a porta paralela e o registrador dx indica qual das portas será testada, 0 para LPT1 e 1 para LPT2.
Para saber se a porta esta ligada (impressora conectada) o resultado da operação de tratamento de interrupção deve ser $80.
Código Completo:
Function OnLine(Porta:Word):Boolean;
Const
Portas :Byte = $02;
Var
Res :Byte;
Begin
{ Código em Assembler }
Asm
mov ah,Portas; {Requisita o acesso as portas}
mov dx,Porta;{Define a porta de teste}
Int $17; {Chama a interrupção de Impressora}
mov Res,ah; {Guarda em Res o resultado da operação }
end;
Result := (Res and $80) = $80; {Testa o valor de saída}
End;
Na sua unit, faça a chamada abaixo:
While not PrinterOnline() do
begin
MsgBox(´Verifique a Impressora!´,´ATENÇÃO´);
end;
Function PrinterOnLine : Boolean;
Const
PrnStInt : Byte = $17;
StRq : Byte = $02;
PrnNum : Word = 0; { 0 para LPT1, 1 para LPT2, etc. }
Var
nResult : byte;
Begin (* PrinterOnLine*)
Asm
mov ah,StRq;
mov dx,PrnNum;
Int $17;
mov nResult,ah;
end;
PrinterOnLine := (nResult and $80) = $80;
End;
********************************************
A interrupção $17 utiliza dois registros ah e dx, o registrador ah indica neste caso o acesso a porta paralela e o registrador dx indica qual das portas será testada, 0 para LPT1 e 1 para LPT2.
Para saber se a porta esta ligada (impressora conectada) o resultado da operação de tratamento de interrupção deve ser $80.
Código Completo:
Function OnLine(Porta:Word):Boolean;
Const
Portas :Byte = $02;
Var
Res :Byte;
Begin
{ Código em Assembler }
Asm
mov ah,Portas; {Requisita o acesso as portas}
mov dx,Porta;{Define a porta de teste}
Int $17; {Chama a interrupção de Impressora}
mov Res,ah; {Guarda em Res o resultado da operação }
end;
Result := (Res and $80) = $80; {Testa o valor de saída}
End;
GOSTEI 0
Marimbondo
22/02/2003
Vcs tem que cuidar que estes codigos assembler nao sao aceitos no Win2000.
Cuidado!!!!
Cuidado!!!!
GOSTEI 0