WIN32PRN + PRINTSETUPEX() + Impressora em Rede

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

WIN32PRN + PRINTSETUPEX() + Impressora em Rede

Mensagem por Luciano Bonfim »

Estou usando a Win32Prn e está tudo funcionando muito bem, só näo consigo imprimir quando a impressora está na rede, só imprime quando a impressora está ligada direto no computador do cliente.

no código abaixo:

Código: Selecionar todos


local oPrinter := win32prn()
nPrn:=PRINTSETUPEX()
oPrinter:New( nPrn )
oPrinter:Landscape := formularioLandscape
oPrinter:FormType  := 9
oPrinter:Copies    := 1
oprinter:SetPrintQuality(1)

if !oPrinter:Create()
   avi_rep("Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.")
   return NIL
endif
if !oPrinter:StartDoc(nomeRelatorio)
   avi_rep("Não foi possivel Iniciar a Impressão, Favor Verificar o Spoll da Impressora")
   return NIL
endif

após o usuário selecionar uma impressora que está na rede pela funçäo PRINTSETUPEX() da HWGUI quando vou dar o comando oPrinter:Create() retorna falso entrando na mensagem de erro.

Quando a impressora está Local funciona bem.

Alguém sabe o que pode ser?

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Você estaria verificando o status da impressora com o PRINTSETUPEX() ? Se for e a impressora for de rede, não tem como saber se está pronta, acho eu.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

nao, eu uso o printsetuphex() para pegar o numero da impressora:

nPrn:=PRINTSETUPEX()
oPrinter:New( nPrn )

depois testo usando a linha:

if !oPrinter:Create()
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Pablo César escreveu:Você estaria verificando o status da impressora com o PRINTSETUPEX() ? Se for e a impressora for de rede, não tem como saber se está pronta, acho eu.
Se vc estiver em um micro XP,2OOO ou SUPERIOR dentro da caixa do PrintSetup() ele aparece visualmente as impressoras prontos ou não !!! se ela não estiver pronta ele aparece a impressora como marca d'agua.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Luciano Bonfim escreveu:nao, eu uso o printsetuphex() para pegar o numero da impressora:

nPrn:=PRINTSETUPEX()
oPrinter:New( nPrn )

depois testo usando a linha:

if !oPrinter:Create()
Segue abaixo a que estou usando e funcionando 100%

Código: Selecionar todos

**************
FUNC CHAMAIMP
**************
LOCAL cPrinterName
LOCAL aPrn    := GetPrinters()
PARA TAM,cARQ      // S=136-colunas  N=79-colunas 

IF TAM=Nil
   TAM="S"
ENDIF

If Empty(aPrn)
   OBRIGA11()  // aviso
   Return
EndIf

IF !EMPTY(cARQ)
   cFILE := cARQ
ELSE
   MsgInfo("Não foi possivel Gerar arquivo de impressão","Aviso do Sistema")
   Return
ENDIF

nPrn:=PrintSetup( @cPrinterName )

IF TAM="S"
   IF !EMPTY(nPrn)
      Imprime(cFILE,136,cPrinterName)
   ENDIF
ELSE
   IF !EMPTY(nPrn)
      Imprime(cFILE,80,cPrinterName)
   ENDIF
ENDIF
RETURN NIL

*********************************************
Function Imprime( cArq, tamrel ,cPrinter )
*********************************************
local cTexto, nLinhas, nA, cLinha    // oPrinter := win32prn():New(cPrinter)
local oPrinter := win32prn():New(cPrinter)

oPrinter:Landscape := .F.
oPrinter:FormType  := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão

oPrinter:Copies    := 1

IF FILE("res\logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
   aTamlog := 9
else
   aTamlog := 0
Endif
*cFILE2=SubStr( cArq, 1, 9 )

GERAFILE()  // gera arquivo temp
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 SAGI")
      MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar o Spoll da Impressora","Aviso do Sistema")
      Return NIL
   endif

   PrintBitMap( oPrinter )
   FOR TT=1 TO aTamlog
      oPrinter:newline()
   NEXT

   IF TAMREL=80
      oPrinter:setfont('Courier New',,11,,,,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:SetFont("Courier New",11,{3,-50}) // Comprimida

      oPrinter:TextOut(HB_OemToAnsi(cLinha))
      oPrinter:Bold(0) // Normal
      dbskip()

      if !eof()
         if (oPrinter:MaxRow() - 2) <= oPrinter:Prow() // Usa "oPrinter:NewPage()" para iniciar nova pagina
            oPrinter:NewPage()
            PrintBitMap( oPrinter )
            FOR TT=1 TO aTamlog
                oPrinter:newline()
            NEXT
         endif
      endif
   enddo
   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
USE
RETURN NIL

************************
FUNC 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder