Peguei este código do Jairo daqui do forum e fiz só umas pequenas alterações.
O arquivo X2121.TXT é um arquivo de texto com umas dez linhas, com 160 colunas.
Estou usando Harbour 3.1
Compila, roda, não da erro mas não manda para a impressora.
No exemplo tinha que adicionar #include "WinGdi.ch"
Mas não achei nas pastas do Harbour.
Estava imprimindo com o win_printfileraw() mas ele não obedece o comando chr(27) + chr(15) para compactar as letras, ai resolvi testar
a win_prn()
Alguém poderia dar uma dica ?
Tirei do codigo os alerts de impressora não achada, etc pois testei com estes comando e não davam erro. Tirei só para o codigo ficar menor
aqui no forum.
Código: Selecionar todos
#include 'inkey.ch'
#include "set.ch"
#include 'dbedit.ch'
#include 'hbgtinfo.ch'
#include 'HbWin.ch'
**************************
Function Main()
**************************
Local cPrinter
Local contl := 1
cFileName := "X2121.TXT"
cLinha := Nil
aLinesPrint := {}
cBuffer := FOpen( cFileName, 2 )
While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0
AaDd( aLinesPrint, cLinha )
End
FClose( cBuffer )
cPrinter := PegaPrinter() // escolhe a impressora
nCopias := 1 // n£mero de c¢pias
*oPrinter := Win32Prn():new( cPrinter )
oPrinter := Win_Prn():new( cPrinter )
oPrinter:landscape := .F.
*oPrinter:formType := DMPAPER_A4 // folha A4 - se deixar aberto da erro
oPrinter:copies := nCopias
****************************************************
* 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 it lico, etc...- se deixar aberto da erro
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
Return Nil
*********************************************
Function PegaPrinter() // seleciona impressora
*********************************************
Local i, nPrn := 1, oPrn, nMaxLen := 0, aPNomes := {}
Local cPrinter := "", aPrn := GetPrinters( .t. )
Local cPrinDefault := GetDefaultPrinter()
If Empty( aPrn )
Alert( "Nenhuma impressora Instalada" )
Return ( cPrinter )
Endif
For i=1 To Len( aPrn )
AaDd( aPNomes , aPrn[i,1] )
nPrn := If( aPrn[i,1] = cPrinDefault, i, nPrn )
nMaxLen := If( Len( aPrn[i,1] ) > nMaxLen, Len( aPrn[i,1] ), nMaxLen )
Next
Clear Screen
nPrn := AChoice( 3, 10, Len( aPNomes )+3, nMaxLen+10, aPNomes, .T., Nil , nPrn )
If nPrn = 0
Return ( cPrinter )
Endi
cPrinter := Alltrim( aPNomes[nPrn] )
Return ( cPrinter )


