1 - Primeiro, você altera a função que pergunta ao usuário se quer imprimir apenas assim:
Código: Selecionar todos
#include "WinGdi.ch"
Function Main()
IF CONFIRMA("Imprimir relatorio?") = 1
W32PRN() // se sim, chama a função W32PRN()
ENDIF
RETURNCódigo: Selecionar todos
Function W32PRN()
Local cPrinter, oPrinter, nLinha, nMaxLinha
Local nNumeroPg := 0
Local cTitulo := "Coloque aqui o nome do Relatorio"
cPrinter := PegaPrinter() // escolhe a impressora
If !Empty( cPrinter )
oPrinter := Win32Prn():new( cPrinter )
oPrinter:landscape := .F.
oPrinter:formType := DMPAPER_A4 // folha A4
oPrinter:copies := 1 // numero de copias
IF .NOT. oPrinter:create()
Alert("Erro Tentando Acessar a Impressora")
Return Nil
ENDIF
IF .NOT. oPrinter:startDoc( "Impressao de Relatorio" )
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...
nMaxLinha := oPrinter:MaxRow() // pega numero maximo de linhas na pagina
nPosiCenter := ( oPrinter:MaxCol() / 2 ) // pega o meio da pagina
USE PRODUTOS SHARED NEW // abre seu arquivo
GOTO TOP // vai para inicio
DO WHILE !EOF()
nLinha := oPrinter:PRow() // pega linha atual de impressao
If nLinha = 0
oPrinter:newLine()
oPrinter:SetPrc( oPrinter:PRow(), nPosiCenter + ( Len( cTitulo ) / 2 ) )
oPrinter:textOut( cTitulo, .T., Nil, 2 ) // imprime o titulo do relatorio
oPrinter:newLine()
EndIf
oPrinter:textOut( CODIGO, .T. ) // imprime e passa para proxima linha
oPrinter:textOut( DESCRICAO, .T. )
oPrinter:newLine() // aqui, pula uma linha apos a descricao
If ( ( nMaxLinha - nLinha ) <= 6 )
nNumeroPg++ // incrementa pagina
oPrinter:SetPrc( nMaxLinha - 2, nPosiCenter + 4 )
oPrinter:textOut( "Pagina: " + LTrim( Str( nNumeroPg ) ), Nil, Nil, 2 )
oPrinter:NewPage()
/*
coloquei esta opcao apenas para voce testar a funcao
para enviar ao cliente voce pode retirar
*/
If Alert( "Imprimir a Pagina " + Ltrim( Str( nNumeroPg + 1 )), { "Sim","Nao" }) != 1
Exit
EndIf
EndIf
Skip
ENDDO
oPrinter:EndDoc() // envia a impressora
oPrinter:Destroy() // fecha documento de impressao
EndIf
Return Nil