duvida com rotina de impressao
Enviado: 04 Jan 2016 16:04
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.
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