duvida com rotina de impressao

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina de impressao

Mensagem por porter »

ola pessoal, na rotina abaixo, se eu informar um arquivo texto qualquer, imprime normalmente, mas se eu passar um arquivo texto como parametro nao impirme, nao posso passar apenas um nome fixo de arquivo texto porque os nomes estao sempre mudando, essa rotina foi copiada aqui do forum,
Estou compilando com o xHarbour.

Código: Selecionar todos

PROCEDURE W32PRN(arqtxt)                   <---- QUERO IMPRIMIR ESSE PARAMETRO que é o arquivo relat10.txt por exemplo.
      #include "WinGdi.ch"
      Local cPrinter
      Local contl := 1
     cFileName := "C:\LOJA\RELAT.TXT"   <---- SE DEIXAR ASSIM DA CERTO
     cFileName := arqtxt                          <---- SE FIZER ASSIM NAO IMPRIME
      SET PRINTER TO
      SET DEVICE TO SCREEN
      If !File("c:\loja\RELAT.TXT")
         Return Nil
      Else  // Vamos colocar seu arquivo num Array
         cLinha := Nil
         aLinesPrint := {}
         cBuffer := FOpen( cFileName, 2 )
         Do While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0
              AaDd( aLinesPrint, cLinha )
         EndDo
         FClose( cBuffer )
      EndIf
      cPrinter := PegaPrinter()  // escolhe a impressora (cPrinter retorna o nome da impressora)
      If !Empty( cPrinter )
         nCopias := 1  // n£mero de c¢pias
         oPrinter           := Win32Prn():new( cPrinter )
         oPrinter:landscape := .F.
         oPrinter:formType  := DMPAPER_A4  // folha A4
         oPrinter:copies    := nCopias
         IF .NOT. oPrinter:create()
            Alert("Erro Tentando Acessar a Impressora")
            Return Nil
         ENDIF
         IF .NOT. oPrinter:startDoc( "Impressao Teste" )
            Alert("Erro Tentando Enviar os Dados de Impressao")
            Return Nil
         ENDIF
         // impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
*****************************************************************
*           oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )
*****************************************************************
         // impressao normal
*****************************************************************
*        oPrinter:SetFont( "Lucida Console", 10 )
*****************************************************************
*        oPrinter:CharSet( 0 )
*        oPrinter:bold( FW_NORMAL )  // nao negrito, nao italico, etc...

         For i = 1 To Len ( aLinesPrint )
           oPrinter:textOut( aLinesPrint[ i ] )  // imprime a linha
           oPrinter:newLine()  // passa para proxima linha
         Next
         oPrinter:endDoc()   // envia a impressora
         oPrinter:destroy()  // fecha documento de impressao
      EndIf
      Return Nil
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

duvida com rotina de impressao

Mensagem por alxsts »

Olá!

Experimente trocar a linha 6, de

Código: Selecionar todos

cFileName := arqtxt
por

Código: Selecionar todos

cFileName := IF( Empty( arqtxt ), "", AllTrim( arqtxt ) )
Retire a linha 5 e teste.
[]´s
Alexandre Santos (AlxSts)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina de impressao

Mensagem por porter »

nao deu certo, estou chamando a rotina assim:

arq = "relat.txt"
set printer to c:\loja\&arq
comandos
comandos

W32PRN(arq)

PROCEDURE W32PRN(arqtxt)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

duvida com rotina de impressao

Mensagem por alxsts »

Olá!

O arquivo a ser impresso está na mesma pasta do .Exe? Se não estiver, é necessário passar o caminho completo do arquivo para a função de impressão:

Código: Selecionar todos

arq = "C:\LOJA\RELAT.TXT" 
set printer to ( arq )
comandos
comandos

W32PRN(arq)

PROCEDURE W32PRN(arqtxt)
[]´s
Alexandre Santos (AlxSts)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida com rotina de impressao

Mensagem por porter »

obrigado alxsts, eu nao estava passando o caminho completo, agora deu certo.
Responder