Página 2 de 5
Enviado: 17 Mar 2008 13:12
por claudioplus
É brincadeira, já tentei dessa forma e não da nenhuma diferenca já tentei tambem LPT1: ao inves de LPT1, e a coisa não muda, estou a tres dias tentando, e pelo que vejo a coisa tá feita, detalhe até com a funcao PRINTFILERAW nao me retorna resultado nenhum.
O QUE FAZER

???????? estou convertendo um sistema inteiro corporativo, e nao posso voltar atras.
Enviado: 17 Mar 2008 13:38
por sygecom
Claudio, aqui funciona, eu utilizo o xharbour 1.0.0 free, inclusive uso tmb. PRINTFILERAW() sem problemas.
Olhe os Retorno da PRINTFILERAW()
Código: Selecionar todos
nResult := PrintFileRaw( cPrinter, cFile, "Teste de Impressão" )
SWITCH nResult
CASE -1
cMsg += "Invalid parameters passed to function" ; EXIT
CASE -2
cMsg += "WinAPI OpenPrinter() call failed" ; EXIT
CASE -3
cMsg += "WinAPI StartDocPrinter() call failed" ; EXIT
CASE -4
cMsg += "WinAPI StartPagePrinter() call failed" ; EXIT
CASE -5
cMsg += "WinAPI malloc() of memory failed" ; EXIT
CASE -6
cMsg += "File " + cFile + " not found" ; EXIT
DEFAULT
cMsg += cFile + " PRINTED OK!!!"
END
Enviado: 17 Mar 2008 13:45
por claudioplus
Meu caro amigo, tenho essa function e já testei, será que o problema não está no Windows XP

??? Detalha a impressora é uma matricial Epson FX-2180, tenho login no Site oficial do xharbour e lá tá escrito que a function IsPrinter existe no xharbour mas não funciona.
Enviado: 17 Mar 2008 13:54
por sygecom
Bom se lá diz isto só resta a acreditar, tenho aqui windows 2003 e a PrintFileRaw() funciona que é uma beleza....
Enviado: 25 Mar 2008 22:59
por Romeuk
Olha só o Help da funçao PrintReady(): Usa número como parâmetro, retorna sempre .F. (vai entender isso...) e só existe para compatibilidade(???). O recomendado é IsPrinter() (?????). Entendi direito?
Código: Selecionar todos
PrintReady()
Tests if a printer connected to a specified port is ready.
Syntax
PrintReady( [<nLPT>] ) --> lPrinterIsReady
Arguments
<nLPT>
This is a numeric value specifying the printer port to check. It defaults to 1.
Return
The function exists for compatibility reasons. It returns always .F. (false). Use IsPrinter() to test the availability of a printer.
Enviado: 25 Mar 2008 23:04
por Romeuk
Foi mal, mas ainda descubro este truque de code e /code....
Enviado: 25 Mar 2008 23:32
por Maligno
Começou o code certo. Mas fechou errado. O certo é fechar com [/code].
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 06 Mai 2008 17:59
por marcos.gurupi
O problema q a ferramenta existe (PrintReady ou PrintStat) mas parece q n funciona ou pelo menos funciona precariamente, pra mim tb sempre retorna 0 ou seja diz q estah desconectada, isso usando LPT1, LPT2, LPT3.
Marcos Roberto
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 06 Mai 2008 18:21
por sygecom
Olá Marcos,
Veja o que diz o HELP do xharbour:
[inglês]
The function exists for compatibility reasons. It returns always .F. (false). Use IsPrinter() to test the availability of a printer.
[português]
A função existe por razões de compatibilidade. Ele sempre retorna. f. (FALSO). Use IsPrinter() para testar a disponibilidade de uma impressora.
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 06 Mai 2008 19:26
por marcos.gurupi
Correto mas o ISPRINTER soh testa impressoras conectadas fisicamente, ou seja, LPT1 e o caso eh verificar impressoras LPT1, LPT2 E ETC.
Assim mantenho o meu usuario informado sobre a atual situacao/status da impressora evitando uma ligacao desnecessaria. Concorda?
Marcos Roberto
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 06 Mai 2008 21:09
por sygecom
Marcos,
o que você esta usando para Imprimir ?
Lhe pergunto por que alguma coisa tem como prever, veja como eu uso:
Código: Selecionar todos
*****************
Function CHAMAIMP
*****************
LOCAL cPrinterName, cPrinterPort
LOCAL aPrn := GetPrinters(.t.,.f.)
PARA TAM,cARQ // S=136 N=79
LOCAL nResult := -1
LOCAL cMsg
IF TAM=Nil
TAM="S"
ENDIF
If Empty(aPrn)
IF MsgYesNo("ATENÇÃO !!! Não foi possivel localizar Nenhuma impressora Instalada no Windows, Deseja Instalar uma Agora ?","Aviso do Sistema")
RunApplet_imp( "AddPrinter" )
Endif
Return
EndIf
IF !EMPTY(cARQ)
cFILE := cARQ
ELSE
MsgInfo("Não foi possivel Gerar arquivo de impressão, Tente Novamente...","Aviso do Sistema")
Return
ENDIF
nPrn:=PrintSetup( @cPrinterName )
for i=1 to len(aPrn)
IF aPrn[i,1] = cPrinterName
cPrinterPort = aPrn[i,2]
exit
ENDIF
next
IF cPrinterPort#Nil
IF LEFT(UPPER(cPrinterPort),3)="LPT" // se for Matricial, Imprime pela PrintFileRaw()
nResult := PrintFileRaw( cPrinterName, cFile, "Impressao Pelo Sistema" )
IF nResult = -1
cMsg = "Parametros Invalido, Favor Tentar Novamente"
ELSEIF nResult = -2
cMsg = "Falha na chamada da Impressora, Favor Vereficar a Impressora"
ELSEIF nResult = -3
cMsg = "Falha ao Iniciar Impressão, Favor Vereficar a Impressora"
ELSEIF nResult = -4
cMsg = "Falha ao Iniciar a Primeira Pagina, Favor Vereficar a Impressora"
ELSEIF nResult = -5
cMsg = "Falha de Memoria da Impressora, Favor Vereficar a Impressora"
ELSEIF nResult = -6
cMsg = "Não foi Possivel localizar o arquivo de Impressão, Favor Tentar Novamente"
ENDIF
IF cMsg#Nil
MsgInfo(cMsg,"Aviso do Sistema")
Return
ENDIF
ELSE
IF TAM="S"
IF !EMPTY(nPrn)
Imprime(cFILE,136,cPrinterName)
ENDIF
ELSE
IF !EMPTY(nPrn)
Imprime(cFILE,80,cPrinterName)
ENDIF
ENDIF
ENDIF
ENDIF
RETURN NIL
FUNCTION RunApplet_imp( cApplet ) //CONFIGURA IMPRESSORA NO WINDOWS
ShellExecute("rundll32.exe","open","shell32.dll, SHHelpShortcuts_RunDLL "+cApplet,"2")
RETURN Nil
******************************************
Function Imprime( cArq, tamrel ,cPrinter )
******************************************
local cTexto, nLinhas, nA, cLinha
local oPrinter := win32prn():New(cPrinter)
oPrinter:Landscape := .F.
oPrinter:FormType := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies := 1
GERAFILE()
vARQ:={}
aadd( vARQ, {"LINHA","C",200,0} )
DBcreate(cFILE, vARQ,"DBFCDX")
SELE 40
USE (cFILE) new shar VIA "DBFCDX"
append from (cArq) sdf && nome completo do arquivo sdf
oPrinter:Create()
IF !oPrinter:Create()
MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.","Aviso do Sistema")
return NIL
ELSE
IF !oPrinter:StartDoc("Impressao Pelo Sistema")
MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora","Aviso do Sistema")
Return NIL
endif
IF FILE("res\logo.bmp") // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
PrintBitMap( oPrinter )
aTamlog := 9
else
aTamlog := 0
endif
FOR TT=1 TO aTamlog
oPrinter:newline()
NEXT
IF TAMREL=80
oPrinter:setfont('Courier New',,12,,,,255) // Normal
ELSE
oPrinter:SetFont("Courier New",11,{3,-50}) // Comprimida
ENDIF
oPrinter:Bold(0) // Normal
dbgotop()
Do while !eof()
cLinha := Linha // Busca linha de impressao
oPrinter:newline() // Inicia nova linha
oPrinter:TextOut(HB_OemToAnsi(cLinha))
oPrinter:Bold(0) // Normal
dbskip()
if !eof()
if (oPrinter:MaxRow() - 2) <= oPrinter:Prow()
oPrinter:NewPage()
IF FILE("res\logo.bmp")
PrintBitMap( oPrinter )
aTamlog := 9
else
aTamlog := 0
endif
FOR TT=1 TO aTamlog
oPrinter:newline()
NEXT
endif
endif
enddo
oPrinter:EndDoc()
oPrinter:Destroy()
ENDIF
USE
RETURN NIL
***************************
Function PrintBitMap( oPrn ) //função para imprimir imagem do logotipo
***************************
LOCAL oBMP
oBMP:= Win32BMP():new()
oBmp:loadFile( "res\logo.bmp" )
oBmp:Draw( oPrn, { 200,200,500,500 } )
oBMP:Destroy()
RETURN
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 07 Mai 2008 12:22
por alaminojunior
Só lembrando que toda essa verificação, por mais que funcione, é muito vaga, e se alguém sem querer chutou a caixa de papel ?
Lembram da técnica do grito ? E aquela da câmera monitorando a impressora ?
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 07 Mai 2008 15:02
por sygecom
Exatamente, nem tudo tem como Prever, mas algumas coisas sim.
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 07 Mai 2008 16:06
por marcos.gurupi
Caros, exitem pelo menos pra mim varias ligacoes durante o dia ou mesmo atendimentos q poderiam n acontecer c algumas ferramentas em forma de avisos ou mesmo solucionando o caso do cliente feitas no sistema funcionassem, o exemplo disso eh uma certa impressora matricial de pedido, por acaso alguem ligou a maquina q estah instalado a impressora depois q foram ligados os outros micros, c o sistema verifica-se de tempo em tempo (e eh isso q estou tentando fazer) a conexao da impressora e fizesse a correcao (atraves de comandos net use lptx) eu pelo menos n teria aquela ligacao q muitas vezes me tira d algo mais importante, isso eu acredito q ocorre comigo e muitos outros colegas, comigo incluse acontece com muita frequencia o cliente me ligar pq sua senha n estah sendo digitada, eu entaum pergunto: "Sua senha eh numerica?" e sempre ouço do outro lado "sim", entaum eu peço para q liguem a tecla NUMLOCK. Ateh isso eu quero deixar para q meu sistema trate. Como tem no windows XP q avisa q a o CapsLock estah ativado, entaum eu sei q n vai resolver o problemas mas tenho certeza q nao havera mais algumas dessas ligacoes desnecessarias.
Marcos Roberto
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Enviado: 08 Mai 2008 12:58
por rochinha
Amiguinhos
Isto também funcionará?
Código: Selecionar todos
wSt1 := PRINTstat("\\servidor\ImpressoraXYZ")
wSt2 := PRINTREADY("\\servidor\ImpressoraXYZ")
Como nunca usei estes recursos, pretendo usar.