Jump to content
Fivewin Brasil

BOX


Arthur Silvestre

Recommended Posts

Bom dia a todos, venho mais uma vez pedir a ajuda dos meus amigos.

tenho uma situação em que preciso criar um relatório com o box,  e dia modelar o relatório e deixar bem alinhado. o que acontece é o fato das impressoras não possuírem a mesma resolução, ou seja, gostaria de criar uma "resolução padrão". Espero que eu tenha sido compreensível  segue  o código de como está atualmente.

 

function Consu_DadosComp2
*Relatorio modelo fivewin 
       cTitulo := 'Recibo De Pagamento ' 
       tit     := 'Recibo De Pagamento '
       if FuncImp() = .f. 
             return .f.
       endif 
       PRINT oPrn NAME cTitulo PREVIEW
       *
       nTam   :=18
       nTamRel:=92
       RESOLUCAO_IMPRESSORA()
       nTamPag:=66
       tlin   :=62
       *
       DEFINE FONT oFontic NAME "Britannic Bold" size ntam+3,-12 OF oPrn
       DEFINE FONT oFonti1 NAME "Times New Roman" size ntam+1,-12 of oPrn
       DEFINE FONT oFonti2 NAME "Arial" size ntam,-12 OF oPrn
       DEFINE FONT oFont2 NAME 'ARIAL' SIZE 0,-8       OF oPrn
       DEFINE FONT oFonti3 NAME "Courier New" size ntam,-12 OF oPrn
       DEFINE FONT oFonti4 NAME "Arial" size ntam+9,-9 OF oPrn
       oprn:setfont(oFonti3)
	 if empty( oprn:hdc )
          MsgStop( "Impressora não está pronta !!!" )
          return nil
       endif
       tpag=0
       inicio=0
       GeraPrev()
       page
       oPrn:SetLandScape()
&&------------------------------------------------------------------------------&&
    mLarg := oFont2:nHeight
    nTab  := oPrn:nHorzRes()            /  85
    nSpc  := (oPrn:nHorzRes()-(2*nTab)) /  85
    //oPrn:SayBitmap( ( 1 * mLarg ) , nTab+nSpc, , 83*nSpc, 98*mLarg  ) 	
oprn:box((1*mLarg),nTab+nSpc,(83*nSpc),(98*mLarg))
//oprn:box(060,40,6555,5050)
//oprn:box(090,70,0400,5025)
inicio++
&&------------------------------------------------------------------------------&&
*FINAL DO RELATÓRIO
oDlgPrev:End()
if inicio=0
    msginfo("Não Existem informações para imprimir...","Atenção")
    Return.f.
endif
oprn:lprvmodal:=.T.
endpage
endprint
oFontic:end()
oFonti1:end()
oFonti2:end()
oFonti3:end()
return

 

 

Link to comment
Share on other sites


STATIC FUNCTION IMPRIMIR_CAIXA_DIA( DbPedidos,  DbPedAnual, cDataInicial, ;
                                    cDataFinal, aGet, DeOndeParte )
 
    LOCAL cAlias, oImagem, gcFile
    LOCAL ResColuna, ResLinha
    LOCAL oPrn,        oFont,       oFontLogo,   oFontDivi,   oFontList,     ;
          oFontCurs,   oPen1,       oPen2,       oPen3,       oFontSubl
    LOCAL nLinha, nColuna // Linha e coluna da Descicao
    LOCAL nDinheiro,    nCheque,     nChequePre,  nTickets,    nCartaoCred,;
          nCartaoDebi,  nContraVale, nPagina,     nTotalGeral, xDataLista
 
    MEMVAR XCAIXAINI, XCAIXAFIN, XOPERAINI, XOPERAFIN
 
    PUBLIC XNOMEEMP, XCIDDIR
 
    XDATALISTA  := ALLTRIM(XCIDDIR)+ ", "        + ;
                   LTRIM( STR( DAY( DATE() ) ) ) + ;
                   " de "                        + ;
                   OemToAnsi(CMONTH( DATE() ))   + ;
                   " de "                        + ;
                   STR( YEAR( DATE() ) )         + ;
                   "."
 
    // VariAveis Para Achar os Valores Que o Cliente Pagou
    nDinheiro   := 0.00
    nCheque     := 0.00
    nChequePre  := 0.00
    nTickets    := 0.00
    nCartaoCred := 0.00
    nCartaoDebi := 0.00
    nContraVale := 0.00
    nTotalGeral := 0.00
 
    cAlias := ALIAS()  // DbPedidos
 
    //-> Mostra o Relatorio... Preview do Fluxo do Caixa
 
    PRINT oPrn NAME "Fluxo do Caixa Discriminado" PREVIEW MODAL
 
        IF EMPTY( oPrn:hDC )
           RETURN NIL          // Printer was not installed or ready
        ENDIF
 
        DEFINE FONT oFont     NAME "Courier New" SIZE 0, -8 OF oPrn
        DEFINE FONT oFontDivi NAME "Courier New" SIZE 0, -12 BOLD OF oPrn
        DEFINE FONT oFontCurs NAME "Courier New" SIZE 0, -14 BOLD OF oPrn
        DEFINE FONT oFontSubl NAME "Courier New" SIZE 0, -16 BOLD UnderLine OF oPrn
 
        //-> Problemas com o Windows XP - Formato da FONTE Nao Reconhecido
        IF IsWinNT() .OR. IsWin2000()  // Para Windows XP/NT e 2000 / 2003
           DEFINE FONT oFontLogo NAME "Courier New" SIZE 0, -16 BOLD OF oPrn
           DEFINE FONT oFontList NAME "Courier New" SIZE 0, -20 BOLD OF oPrn
        ELSE //-> 95/98/ME
           DEFINE FONT oFontLogo NAME "Courier New" SIZE 0, -20 BOLD OF oPrn
           DEFINE FONT oFontList NAME "Courier New" SIZE 0, -22 BOLD OF oPrn
        ENDIF
 
        //-> Caneta do Preview
        DEFINE PEN oPen1 WIDTH 4 COLOR CLR_BROWN OF oPrn
        DEFINE PEN oPen2 WIDTH 2 COLOR CLR_BROWN OF oPrn
        DEFINE PEN oPen3 WIDTH 5 COLOR CLR_BLACK OF oPrn
 
        oPrn:SetPage(9)     //-> A4 //9
        oPrn:SetPortrait()  //-> Vertical(Retrato)
        //oPrn:SetLandscape() //-> Horizontal
 
        //- Como Imprimir em Centimetros sem errar e em qualquer Impressora
        ResLinha  := oPrn:nVertRes()   /   40
        ResLinha  := oPrn:nLogPixely() / 2.54
        ResColuna := oPrn:nLogPixelx() / 2.54
 
        nPagina := 1
 
        PAGE
 
            nLinha  :=  0.50
            nColuna := 10.00
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                      XNOMEEMP, oFontDivi,, CLR_BLACK,, PAD_CENTER )
 
            nLinha  += 0.50
            nColuna := 1.00
 
            //-> Data de Hoje
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                      OemToAnsi( "Data: " + DTOC( DATE() ) ), oFont,, ;
                      CLR_BLACK,, PAD_LEFT )
 
            nColuna := 10.00
 
            //-> Cabe‡alho
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,        ;
                      "FLUXO DO CAIXA DISCRIMINADO ", oFontDivi,,    ;
                      CLR_BLACK,, PAD_CENTER )
 
            nColuna := 17.50
 
            //-> Pagina
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,               ;
                      OemToAnsi( "P gina: " + STRZERO( nPagina ) ), oFont,, ;
                      CLR_BLACK,, PAD_CENTER )
 
            nLinha  +=  0.50
            nColuna := 10.00
 
            IF XCAIXAINI > 0 .AND. XCAIXAFIN > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                         OemToAnsi( "Caixa Inicial: " + STR( XCAIXAINI ) +   ;
                                    "  -  "                              +   ;
                                    "Caixa Final..: " + STR( XCAIXAFIN ) ),  ;
                         oFont,, CLR_BLACK,, PAD_CENTER )
 
            ELSEIF VAL(XOPERAINI) > 0 .AND. VAL(XOPERAFIN) > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                         OemToAnsi( "Operador Inicial: " + ( XOPERAINI ) +   ;
                                    "  -  "                              +   ;
                                    "Operador Final..: " + ( XOPERAFIN ) ),  ;
                         oFont,, CLR_BLACK,, PAD_CENTER )
 
            ENDIF
 
            nLinha  += 0.50
            nColuna := 1.00
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                      REPLICATE("-",110), oFont,, CLR_BLACK,, PAD_LEFT )
 
            nLinha += 0.30  //-> Pula a Linha
 
            //-> Cabecalho
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,  ;
                      OemToAnsi( "CàDIGO PROD  " + SPACE(12) + ;
                                 "DESCRIۂO    " + SPACE(10) + ;
                                 "VL. UNITµRIO " + SPACE(08) + ;
                                 "QTDE VENDIDA " + SPACE(10) + ;
                                 "TOTAL ÖTEM   " ), oFont,, CLR_BLACK,, PAD_LEFT )
 
            nLinha += 0.30  //-> Pula a Linha
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                      REPLICATE("-",110), oFont,, CLR_BLACK,, PAD_LEFT )
 
            nLinha += 0.30
 
            //-> Vou imprimir os produtos
            WHILE ( .NOT. EOF() )
 
                SYSREFRESH()
 
                IF EOF()
                   EXIT
                ENDIF
 
                IF nLinha >= 27   // Nova Pagina = 54 Linhas
 
                   ENDPAGE // Fecho a Pagina Anterior, Para Nao Quebrar o Metafile
 
                   PAGE    // Nova Pagina - Abro uma nova pagina
 
                   nPagina := nPagina + 1
 
                   nLinha  :=  0.50
                   nColuna := 10.00
 
                   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                             XNOMEEMP, oFontDivi,, CLR_BLACK,, PAD_CENTER )
 
                   nLinha  += 0.50
                   nColuna := 1.00
 
                   //-> Data de Hoje
                   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                             OemToAnsi( "Data: " + DTOC( DATE() ) ), oFont,, ;
                             CLR_BLACK,, PAD_LEFT )
 
                   nColuna := 10.00
 
                   //-> Cabecalho
                   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,        ;
                             "FLUXO DO CAIXA DISCRIMINADO ", oFontDivi,,    ;
                             CLR_BLACK,, PAD_CENTER )
 
                   nColuna := 17.50
 
                   //-> Pagina
                   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,        ;
                             OemToAnsi( "P gina: " + STRZERO( nPagina ) ),  ;
                             oFont,, CLR_BLACK,, PAD_CENTER )
 
                   nLinha  +=  0.50
                   nColuna := 10.00
 
                   IF XCAIXAINI > 0 .AND. XCAIXAFIN > 0
 
                      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,     ;
                                OemToAnsi( "Caixa Inicial: " +              ;
                                           STR( XCAIXAINI )  + "  -  " +    ;
                                           "Caixa Final..: " +              ;
                                           STR( XCAIXAFIN ) ),              ;
                                oFont,, CLR_BLACK,, PAD_CENTER )
 
                   ELSEIF VAL(XOPERAINI) > 0 .AND. VAL(XOPERAFIN) > 0
 
                      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,     ;
                                OemToAnsi( "Operador Inicial: "    +        ;
                                           ( XOPERAINI ) + "  -  " +        ;
                                           "Operador Final..: "    +        ;
                                           ( XOPERAFIN ) ),                 ;
                                oFont,, CLR_BLACK,, PAD_CENTER )
 
                   ENDIF
 
                   nLinha  += 0.50
                   nColuna := 1.00
 
                   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                             REPLICATE("-",110), oFont,, CLR_BLACK,, PAD_LEFT )
 
                   nLinha += 0.30  //-> Pula a Linha
 
                   //-> Cabecalho
                   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,  ;
                             OemToAnsi( "CàDIGO PROD  " + SPACE(12) + ;
                                        "DESCRIۂO    " + SPACE(11) + ;
                                        "VL. UNITµRIO " + SPACE(08) + ;
                                        "QTDE VENDIDA " + SPACE(10) + ;
                                        "TOTAL ÖTEM " ), oFont,,      ;
                                        CLR_BLACK,, PAD_LEFT )
 
                   nLinha += 0.30  //-> Pula a Linha
 
                   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                             REPLICATE("-",110), oFont,, CLR_BLACK,, PAD_LEFT )
 
                   nLinha += 0.30
 
                ENDIF
 
                nColuna := 1.00
 
                //-> Codigo do Produto
                oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                        ( cAlias )->CODIGO, oFont,, CLR_BLACK,, PAD_LEFT )
 
                nColuna := 3.50
 
                //-> Nome do Produto
                oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,     ;
                          SUBSTR(( cAlias )->DESCRICAO,1,30), oFont,, ;
                          CLR_BLACK,, PAD_LEFT )
 
                nColuna := 9.00
 
                oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,     ;
                          TRANSF((( cAlias )->VLUNITARIO),            ;
                          "@E 999,999,999,999.99" ), oFont,,          ;
                          CLR_BLACK,, PAD_LEFT )
 
                nColuna := 12.50
 
                oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,     ;
                          TRANSF((( cAlias )->QTD_VENDEU),            ;
                          "999999999999.99" ), oFont,, CLR_BLACK,, PAD_LEFT )
 
                nColuna := 15.50
 
                oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,     ;
                          TRANSF((( cAlias )->TOTITEM),               ;
                          "@E 999,999,999,999.99" ), oFont,, CLR_BLACK,, PAD_LEFT )
 
                nColuna := 1.00
                nLinha += 0.30  //-> Pula a Linha
 
                oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                          REPLICATE("-",110), oFont,, CLR_BLACK,, PAD_LEFT )
 
                nDinheiro   := nDinheiro   + ( cAlias )->DINHEIRO - ;
                                             ( cAlias )->TROCOCLIEN
 
                nCheque     := nCheque     + ( cAlias )->CHEQUE
                nChequePre  := nChequePre  + ( cAlias )->CHEQUEPRE
                nTickets    := nTickets    + ( cAlias )->TICKETS
                nCartaoCred := nCartaoCred + ( cAlias )->CARTAOCRED
                nCartaoDebi := nCartaoDebi + ( cAlias )->CARTAODEBI
                nContraVale := nContraVale + ( cAlias )->CONTRAVALE
                nTotalGeral := nTotalGeral + ( cAlias )->TOTPEDIDO
 
                SKIP  // Proximo Produto
 
                nLinha += 0.50  //-> Pula a Linha Para o Proximo Produto
 
            ENDDO
 
            IF nLinha >= 27   // Nova Pagina = 54 Linhas
 
               ENDPAGE // Fecho a Pagina Anterior, Para Nao Quebrar o Metafile
 
               PAGE    // Nova Pagina - Abro uma nova pagina
 
               nPagina := nPagina + 1
 
               nLinha  :=  0.50
               nColuna := 10.00
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                         XNOMEEMP, oFontDivi,, CLR_BLACK,, PAD_CENTER )
 
               nLinha  += 0.50
               nColuna := 1.00
 
               //-> Data de Hoje
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                         OemToAnsi( "Data: " + DTOC( DATE() ) ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nColuna := 10.00
 
               //-> Cabecalho
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,        ;
                         "FLUXO DO CAIXA DISCRIMINADO ", oFontDivi,,    ;
                         CLR_BLACK,, PAD_CENTER )
 
               nColuna := 17.50
 
               //-> Pagina
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,           ;
                         OemToAnsi( "P gina: " + STRZERO( nPagina ) ), oFont,, ;
                         CLR_BLACK,, PAD_CENTER )
 
               nLinha  +=  0.50
               nColuna := 10.00
 
               IF XCAIXAINI > 0 .AND. XCAIXAFIN > 0
 
                  oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,            ;
                            OemToAnsi( "Caixa Inicial: " + STR( XCAIXAINI ) +  ;
                                       "  -  "                              +  ;
                                       "Caixa Final..: " + STR( XCAIXAFIN ) ), ;
                            oFont,, CLR_BLACK,, PAD_CENTER )
 
               ELSEIF VAL(XOPERAINI) > 0 .AND. VAL(XOPERAFIN) > 0
 
                  oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,            ;
                            OemToAnsi( "Operador Inicial: " + ( XOPERAINI ) +  ;
                                       "  -  "                              +  ;
                                       "Operador Final..: " + ( XOPERAFIN ) ), ;
                            oFont,, CLR_BLACK,, PAD_CENTER )
 
               ENDIF
 
               nLinha  += 0.50
               nColuna := 1.00
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                         REPLICATE("-",110), oFont,, CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30  //-> Pula a Linha
 
            ENDIF
 
            nColuna := 1.00
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,        ;
                      "TOTAL GERAL: ", oFontDivi,,                   ;
                      CLR_BLACK,, PAD_LEFT )
 
            nColuna := 14.00
 
            //-> Total Geral
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                      TRANSF( nTotalGeral, "@E 999,999,999,999.99" ), ;
                      oFontDivi,, CLR_BLACK,, PAD_LEFT )
 
            nLinha  += 0.50
            nColuna := 1.00
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                      REPLICATE("-",110), oFont,, CLR_BLACK,, PAD_LEFT )
 
            nLinha += 0.50
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,        ;
                      "RESUMO GERAL: ", oFont,,                      ;
                      CLR_BLACK,, PAD_LEFT )
 
            nLinha += 0.50
 
            nColuna := 1.00
 
            IF nDinheiro    > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,         ;
                         "EM DINHEIRO..: " +                             ;
                         TRANSF( nDinheiro, "@E 9,999,999.99" ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30
 
            ENDIF
 
            IF nCheque      > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,       ;
                         "EM CHEQUE....: " +                           ;
                         TRANSF( nCheque, "@E 9,999,999.99" ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30
 
            ENDIF
 
            IF nChequePre   > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,          ;
                         "EM CHEQUE PRE: " +                              ;
                         TRANSF( nChequePre, "@E 9,999,999.99" ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30
 
            ENDIF
 
            IF nTickets     > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,      ;
                         "EM TICKETS...: " +                          ;
                         TRANSF( nTickets, "@E 999,999.99" ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30
 
            ENDIF
 
            IF nCartaoCred  > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,           ;
                         "EM C. CREDITO: " +                               ;
                         TRANSF( nCartaoCred, "@E 9,999,999.99" ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30
 
            ENDIF
 
            IF nCartaoDebi  > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,           ;
                         "EM C. DEBITO.: " +                               ;
                         TRANSF( nCartaoDebi, "@E 9,999,999.99" ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30
 
            ENDIF
 
            IF nContraVale  > 0
 
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,           ;
                         "EM C. VALE...: " +                               ;
                         TRANSF( nContraVale, "@E 9,999,999.99" ), oFont,, ;
                         CLR_BLACK,, PAD_LEFT )
 
               nLinha += 0.30
 
            ENDIF
 
            nLinha  +=  0.50
            nColuna := 14.00
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,            ;
                      "" + XDATALISTA,                                   ;
                      oFont,, CLR_BLACK,, PAD_CENTER )
 
            nLinha  ++
 
            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,            ;
                      "________________________________"+                ;
                      "__________",                                      ;
                      oFont,, CLR_BLACK,, PAD_CENTER )
 
            nLinha += 0.30
 
        ENDPAGE
 
    ENDPRINT
 
    oFont:End()
    oFontLogo:End()
    oFontDivi:End()
    oFontList:End()
    oFontCurs:End()
    oFontSubl:End()
 
    oPen1:End()
    oPen2:End()
    oPen3:End()
 
RETURN NIL

Link to comment
Share on other sites

A pergunta é do Arthur Silvestre, veja:


 

gostaria de criar uma "resolução padrão".

 

Minha Resposta:

 


        //- Como Imprimir em Centimetros sem errar e em qualquer Impressora
        ResLinha  := oPrn:nVertRes()   /   40
        ResLinha  := oPrn:nLogPixely() / 2.54
        ResColuna := oPrn:nLogPixelx() / 2.54

 

Link to comment
Share on other sites

A pergunta é do Arthur Silvestre, veja:
 
gostaria de criar uma "resolução padrão".
 
Minha Resposta:
 
        //- Como Imprimir em Centimetros sem errar e em qualquer Impressora
        ResLinha  := oPrn:nVertRes()   /   40
        ResLinha  := oPrn:nLogPixely() / 2.54
        ResColuna := oPrn:nLogPixelx() / 2.54
 

 

 

Desculpa tanta demora em responder. O que vou utilizar é um "oprn:Box( , , , )" e quando mudo de uma lx300 para uma deskjet ou uma com uma pixelação a 900 ou 1000 ele alterna os tamanhos, mesmo com esse esquema ai kapiaba

Link to comment
Share on other sites

É mesmo?  Tá fazendo assim??

 


STATIC FUNCTION IMPRIME_LISTANOTAS( lAppend, oDbfTabela, oDbfCadDig,          ;
                                             oDbfTurmas, oDbfVendedor,        ;
                                             oDbfEmpresa )
 
    LOCAL nPulaLinha
    //-> Para os For...Next  - Final
    LOCAL oPrn,        oFont,       oFontLogo,   oFontDivi,   oFontList,      ;
          oFontCurs,   oPen1,       oPen2,       oPen3,       oFontSubl
 
    LOCAL nLinAlun
    LOCAL nColAlun
 
    //-> Linhas Para Quinze Nomes Inicialmente Primeiro Preview
    LOCAL nLinInNomes, nColInNomes, nLinFiNomes, nColFiNomes
    LOCAL nLinMaisNom, nColMaisNom
    LOCAL nLinLogo,  nColLogo
    LOCAL ResColuna, ResLinha
    LOCAL nLinNome,  nColNome
    LOCAL nLinNume,  nColNume
    LOCAL nLinNCpf,  nColNCpf
    LOCAL nLinMod1,  nColMod1
    LOCAL nLinMod2,  nColMod2
    LOCAL nLinMod3,  nColMod3
    LOCAL nLinMod4,  nColMod4
 
    MEMVAR XNOMEEMP, XPORTARIA, XENDERECO, XTELEFONE, XEMAIL, XOFICIO, XNOMECUR
    MEMVAR XCOD, XTURMA1, XDE1, XA1, XHRINI1, XHRTER1, XSALA1, XTOTCARG
    MEMVAR XCOMPTURM, XDIRETOR, XCREDENCIAL
 
    EXTERNAL ISPRINTER
    IF .NOT. ISPRINTER()
        SndPlaySound(".\Erro.wav" )
        Checa_Imp() // Checar Se a Impressora Est  Ativa..
        Return Nil
    ENDIF
 
    CursorWait()
 
    SELECT ( oDbfCadDig:cAlias ) // Seleciona o Alias
    oDbfCadDig:SetOrder( 2 )     //-> Por Nome do Aluno - Michelle Alfa
    oDbfCadDig:GoTop()
 
    //-> Pegar as Turmas do Curso - Filtro Por Ordem Alfab‚tica - Michelle
    SET FILTER TO ( oDbfCadDig:cAlias )->TURMA = XTURMA1 .AND. ;
                  ( oDbfCadDig:cAlias )->COD   = XCOD
    GO TOP
 
    //-> Mostra o Relat¢rio... 
 
    PRINTER oPrn NAME "Relatório da Lista de Notas dos Alunos" PREVIEW MODAL
 
        DEFINE FONT oFont     NAME "Arial" SIZE 0, -10 BOLD           OF oPrn
        DEFINE FONT oFontDivi NAME "ARIAL" SIZE 0, -12 BOLD           OF oPrn
        DEFINE FONT oFontCurs NAME "ARIAL" SIZE 0, -14 BOLD           OF oPrn
        DEFINE FONT oFontSubl NAME "ARIAL" SIZE 0, -15 BOLD UnderLine OF oPrn
        DEFINE FONT oFontLogo NAME "ARIAL" SIZE 0, -20 BOLD           OF oPrn
        DEFINE FONT oFontList NAME "ARIAL" SIZE 0, -26 BOLD           OF oPrn
 
        //-> Caneta do Preview
        DEFINE PEN oPen1 WIDTH 4 COLOR CLR_BLACK                      OF oPrn
        DEFINE PEN oPen2 WIDTH 2 COLOR CLR_BLACK                      OF oPrn
        DEFINE PEN oPen3 WIDTH 5 COLOR CLR_BLACK                      OF oPrn
 
        oPrn:SetPage(9)     //->Folha
        oPrn:SetLandScape() //->Horizontal(Paisagem)
 
        //- Como Imprimir em Centimetros sem errar e em qualquer Impressora
        ResLinha  := oPrn:nLogPixely()/2.54
        ResColuna := oPrn:nLogPixelx()/2.54
 
        PAGE
            //-> µrea dos Boxes do Relat¢rio---------------------------------//
 
            //-> Box do Logo
            oPrn:Box( 0.23 * ResLinha,  0.20 * ResColuna,                     ;
                      2.41 * ResLinha, 27.70 * ResColuna, oPen3 )
 
            //-> µrea do Texto do Primeiro Box
            oPrn:Say(  0.60 * ResLinha,  9.00 * ResColuna,                    ;
                         "DETRAN-SP",    oFontLogo,,                          ;
                         CLR_BLACK,, PAD_CENTER )
 
            oPrn:Say(  1.40 * ResLinha,  8.50 * ResColuna,                    ;
                         "DIVISÃO DE EDUCAÇÃO DE TRÂNSITO",                   ;
                         oFontCurs,,                                          ;
                         CLR_BLACK,, PAD_CENTER  )
 
            //-> µrea do Texto do Segundo Box
            oPrn:Say(  0.90 * ResLinha, 20.50 * ResColuna,                    ;
                       "LISTA DE NOTAS",   oFontList,,                        ;
                       CLR_BLACK,, PAD_CENTER  )
 
            //-> Faz um Tra‡o Vertical no Meio do Logo
            nLinLogo :=  0.20
            nColLogo := 13.85
            FOR nPulaLinha = 1 TO 20
                oPrn:Say(  nLinLogo * ResLinha, nColLogo * ResColuna, "|",    ;
                           oFontDivi,,                                        ;
                           CLR_BLACK,, PAD_CENTER )
                nLinLogo += 0.09
            NEXT nPulaLinha
 
            //->             Linha            Coluna
            oPrn:SayBitMap(  0.30 * ResLinha,  0.50 * ResColuna,              ;
                             "DETRAN2.BMP",                                   ;
                             2.50 * ResLinha, 1.95 * ResColuna )
 
            //-> Linha em Branco Para Fecha a Pagina, Embaixo do Logo
            oPrn:Box(  2.40 * ResLinha,  0.20 * ResColuna,                    ;
                       2.90 * ResLinha, 27.70 * ResColuna, oPen1 )
 
            //-> Box da Empresa
            oPrn:Box(  2.89 * ResLinha,   0.20 * ResColuna,                   ;
                       3.40 * ResColuna, 27.70 * ResColuna, oPen1 )
 
            oPrn:Say(  2.90 * ResLinha,   0.50 * ResColuna,                   ;
                       "NOME DA EMPRESA: " + XNOMEEMP,   oFontDivi,,          ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Linha em Branco Para Fechar a Pagina, Embaixo da Empresa
            oPrn:Box(  3.39 * Reslinha,  0.20 * ResColuna,                    ;
                       3.70 * ResLinha, 27.70 * ResLinha, oPen1 )
 
            //-> Box do Curso
            oPrn:Box(  3.69 * ResLinha,  0.20 * ResColuna,                    ;
                       4.70 * ResLinha, 13.85 * ResColuna, oPen3 )
 
            oPrn:Say(  3.80 * ResLinha,  0.50 * ResColuna,                    ;
                       "NOME DO CURSO: "+XNOMECUR,   oFontDivi,,              ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Box da Turma
            oPrn:Box(  4.69 * ResLinha,   0.20 * ResColuna,                   ;
                       5.70 * ResLinha,  13.85 * ResColuna, oPen3 )
 
            oPrn:Say(  4.80 * ResLinha,   0.50 * ResColuna,                   ;
                       "TURMA: "+XCOMPTURM,   oFontDivi,,                     ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Box do Per¡odo do Curso
            oPrn:Box(  3.69 * ResLinha, 13.84 * ResColuna,                    ;
                       5.70 * ResLinha, 27.70 * ResColuna, oPen3 )
 
            oPrn:Say(  4.50 * ResLinha, 16.84 * ResColuna,                    ;
                       "PERÃODO DO CURSO ",   oFontDivi,,                     ;
                       CLR_BLACK,, PAD_CENTER )
 
            oPrn:Say(  3.75 * ResLinha, 19.84 * ResColuna,                    ;
                       "CARGA HORÃRIA: "+XTOTCARG,   oFontDivi,,              ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  4.25 * ResLinha, 19.84 * ResColuna,                    ;
                       "DIAS: "+DTOC(XDE1) + " a " + DTOC(XA1),               ;
                       oFontDivi,,                                            ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  4.75 * ResLinha, 19.84 * ResColuna,                    ;
                       "HORA DE INICIO: "+XHRINI1,                            ;
                       oFontDivi,,                                            ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  5.25 * ResLinha, 19.84 * ResColuna,                    ;
                       "HORA DE TÉRMINO: "+XHRTER1,   oFontDivi,,             ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Linha em Branco Para Fechar a Pagina, Embaixo da Turma
            oPrn:Box(  5.69 * ResLinha,  0.20 * ResColuna,                    ;
                       6.20 * ResLinha, 27.70 * ResColuna, oPen3 )
 
            //-> Linha em Branco Para a Rela‡Æo de Alunos Matriculados
            oPrn:Box(  6.19 * ResLinha,  0.20 * ResColuna,                    ;
                       6.70 * ResLinha, 27.70 * ResColuna, oPen3 )
 
            //-> Texto da Rela‡Æo de Alunos Matriculados
            oPrn:Say(  6.25 * ResLinha, 13.85 * ResColuna,                    ;
                       "RELAÇÃO DE ALUNOS MATRICULADOS ",                     ;
                       oFontDivi,,                                            ;
                       CLR_BLACK,, PAD_CENTER )
 
            //-> Box do SAY do Nome do Aluno/cpf  aqui
            oPrn:Box(  6.69 * ResLinha,  0.20 * ResColuna,                    ;
                       7.70 * ResLinha, 14.80 * ResColuna, oPen3 )
 
            oPrn:Say(  7.00 * ResLinha,  0.45 * ResColuna, "Nº. ",            ;
                       oFontDivi,,                                            ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  7.00 * ResLinha, 5.1 * ResColuna,                      ;
                       "ALUNO ",   oFontDivi,,                                ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  7.00 * ResLinha, 13.00 * ResColuna, "CPF ",            ;
                       oFontDivi,,                                            ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Box do SAY da Nota do Aluno Por M¢dulo aqui
            oPrn:Box(  6.69 * ResLinha, 14.79 * ResColuna,                    ;
                       7.20 * ResLinha, 27.70 * ResColuna, oPen3 )
 
            oPrn:Say(  6.75 * ResLinha, 21.00 * ResColuna,                    ;
                       "NOTAS POR MÓDULO ",   oFontDivi,,                     ;
                       CLR_BLACK,, PAD_CENTER )
 
            //-> Box dos M¢dulos I II III IV  aqui
            oPrn:Box(  7.19 * ResLinha, 14.79 * ResColuna,                    ;
                       7.70 * ResLinha, 27.70 * ResColuna, oPen3 )
 
            oPrn:Say(  7.25 * ResLinha, 15.50 * ResColuna,                    ;
                       "MÓDULO I ", oFontDivi,,                               ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  7.25 * ResLinha, 18.70 * ResColuna,                    ;
                       "MÓDULO II ", oFontDivi,,                              ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  7.25 * ResLinha, 21.70 * ResColuna,                    ;
                       "MÓDULO III ", oFontDivi,,                             ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  7.25 * ResLinha, 24.70 * ResColuna,                    ;
                       "MÓDULO IV ", oFontDivi,,                              ;
                       CLR_BLACK,, PAD_LEFT )
 
            //->Separa //-> Ultimo Box, Foi 7.70 M¢dulos I II III IV
            nLinInNomes :=  7.69
            nColInNomes :=  0.20
            nLinFiNomes :=  8.35
            nColFiNomes := 27.70
            FOR nPulaLinha = 1 TO 15
                //-> Box das Quinze Linhas Para os Nomes
                oPrn:Box( nLinInNomes * ResLinha, nColInNomes * ResColuna,    ;
                          nLinFiNomes * ResLinha, nColFiNomes * ResColuna, oPen3 )
                nLinInNomes += 0.65
                nLinFiNomes += 0.65
            NEXT nPulaLinha
 
            //-> Cria a Numera‡Æo de 1 a 15 Para os Nomes dos Alunos Lado Esquerdo do Texto
            nLinMaisNom := 7.80
            nColMaisNom := 0.50
            FOR nPulaLinha = 1 TO 15 //-> Linhas
                oPrn:Say( nLinMaisNom * ResLinha, nColMaisNom * ResColuna,    ;
                          STR( nPulaLinha, 2 ),                               ;
                          oFontDivi,,                                         ;
                          CLR_BLACK,, PAD_LEFT )
                nLinMaisNom += 0.65
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do N§
            nLinNume :=  6.68
            nColNume :=  1.10
            FOR nPulaLinha = 1 TO 105
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Vou IMPRIMIR o NOME / CPF do Aluno
            nLinNome   :=  7.85
            nColNome   :=  1.25
 
            nLinNCpf   :=  7.85
            nColNCpf   := 12.30
 
            nLinMod1   :=  7.85
            nColMod1   := 16.20
 
            nLinMod2   :=  7.85
            nColMod2   := 19.30
 
            nLinMod3   :=  7.85
            nColMod3   := 22.40
 
            nLinMod4   :=  7.85
            nColMod4   := 25.40
 
            nPulaLinha := 0
 
            WHILE !EOF()
 
                SYSREFRESH()
 
                IF EOF()
                    EXIT
                ENDIF
 
                IF nPulaLinha >= 15
                    EXIT
                ENDIF
 
                //-> Nome do Aluno
                oPrn:Say( nLinNome * ResLinha, nColNome * ResColuna,          ;
                          ( oDbfCadDig:cAlias )->NOME,                        ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_LEFT )
 
                //-> CPF do Aluno
                oPrn:Say( nLinNCpf * ResLinha, nColNCpf * ResColuna,          ;
                          ( oDbfCadDig:cAlias )->CIC,                         ;
                           oFont,,                                            ;
                           CLR_BLACK,, PAD_LEFT )
 
                //-> NOTAS DO MODULO I
                oPrn:Say( nLinMod1 * ResLinha, nColMod1 * ResColuna,          ;
                          ( oDbfCadDig:cAlias )->MODULOI,                     ;
                           oFont,,                                            ;
                           CLR_BLACK,, PAD_LEFT )
 
                //-> NOTAS DO MODULO II
                oPrn:Say( nLinMod2 * ResLinha, nColMod2 * ResColuna,          ;
                          ( oDbfCadDig:cAlias )->MODULOII,                    ;
                           oFont,,                                            ;
                           CLR_BLACK,, PAD_LEFT )
 
                //-> NOTAS DO MODULO III
                oPrn:Say( nLinMod3 * ResLinha, nColMod3 * ResColuna,          ;
                          ( oDbfCadDig:cAlias )->MODULOIII,                   ;
                           oFont,,                                            ;
                           CLR_BLACK,, PAD_LEFT )
 
                //-> NOTAS DO MODULO IV
                oPrn:Say( nLinMod4 * ResLinha, nColMod4 * ResColuna,          ;
                          ( oDbfCadDig:cAlias )->MODULOIV,                    ;
                           oFont,,                                            ;
                           CLR_BLACK,, PAD_LEFT )
 
                SKIP
 
                nLinNome += 0.65  //-> Pula a Linha Para o Novo Nome
                nLinNCpf += 0.65  //-> Pula a Linha Para o Novo CPF
                nLinMod1 += 0.65  //-> Pula a Linha Para o Novo ModuloI
                nLinMod2 += 0.65  //-> Pula a Linha Para o Novo ModuloII
                nLinMod3 += 0.65  //-> Pula a Linha Para o Novo ModuloIII
                nLinMod4 += 0.65  //-> Pula a Linha Para o Novo ModuloIV
 
                nPulaLinha++      //-> NÆo Deixar Escrever Mais de 15 Nomes
 
            ENDDO
 
            //-> Faz um Tra‡o Vertical na Frente do Nome do Aluno
            nLinNume :=  6.68
            nColNume := 12.00
            FOR nPulaLinha = 1 TO 105
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF do Aluno
            nLinNume :=  7.68
            nColNume := 14.80
            FOR nPulaLinha = 1 TO 95
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF MODULO I
            nLinNume :=  7.18
            nColNume := 18.20
            FOR nPulaLinha = 1 TO 100
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF MODULO II
            nLinNume :=  7.18
            nColNume := 21.20
            FOR nPulaLinha = 1 TO 100
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF MODULO III
            nLinNume :=  7.18
            nColNume := 24.30
            FOR nPulaLinha = 1 TO 100
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Observa‡Æo no Rodap‚ do Texto - Primeiro Preview
            oPrn:Say( 18.00 * ResLinha, 13.50 * ResColuna,                    ;
                      "Caso haja na turma alunos fazendo "    +               ;
                      "o curso  de atualização, não inserir " +               ;
                      "notas e sim se o mesmo foi ou não "    +               ;
                      "aprovado.",  oFont,,                                   ;
                      CLR_BLACK,, PAD_CENTER )
 
 
        ENDPAGE
 
        //-> Aqui, NÆo Coube na P gina, Mandei Pular Para a Pr¢xima...
        //-> Nova P gina Porque NÆo Coube no Preview da Anterior Modelo Michele
        PAGE
 
            nLinInNomes :=  0.23
            nColInNomes :=  0.20
            nLinFiNomes :=  0.88
            nColFiNomes := 27.70
            FOR nPulaLinha = 1 TO 13
                //-> Box das Linhas Para os Nomes - Segunda P gina
                oPrn:Box( nLinInNomes * ResLinha, nColInNomes * ResColuna,    ;
                          nLinFiNomes * ResLinha, nColFiNomes * ResColuna, oPen3 )
                nLinInNomes += 0.64
                nLinFiNomes += 0.65
            NEXT nPulaLinha
 
            //-> Cria a Numera‡Æo de 16 a 20 Para os Nomes dos Alunos Lado Esquerdo do Texto
            nLinMaisNom := 0.30
            nColMaisNom := 0.50
            FOR nPulaLinha = 16 TO 20 //-> Linhas
                oPrn:Say( nLinMaisNom * ResLinha, nColMaisNom * ResColuna,    ;
                          STR( nPulaLinha, 2 ),                               ;
                          oFontDivi,,                                         ;
                          CLR_BLACK,, PAD_LEFT )
                nLinMaisNom += 0.65
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do N§ do Segundo Preview
            nLinNume :=  0.22
            nColNume :=  1.10
            FOR nPulaLinha = 1 TO 36
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Se o Total de Alunos For Maior Que 15... Continua Imprimindo
            IF nPulaLinha >= 15
 
                //-> Vou IMPRIMIR o NOME / CPF do Aluno Continua‡Æo
                nLinNome   :=  0.40
                nColNome   :=  1.25
 
                nLinNCpf   :=  0.40
                nColNCpf   := 12.30
 
                nLinMod1   :=  0.40
                nColMod1   := 16.20
 
                nLinMod2   :=  0.40
                nColMod2   := 19.30
 
                nLinMod3   :=  0.40
                nColMod3   := 22.40
 
                nLinMod4   :=  0.40
                nColMod4   := 25.40
 
                WHILE !EOF()
 
                    SYSREFRESH()
 
                    IF EOF()
                        EXIT
                    ENDIF
 
                    //-> Nome do Aluno
                    oPrn:Say( nLinNome * ResLinha, nColNome * ResColuna,      ;
                              ( oDbfCadDig:cAlias )->NOME,                    ;
                              oFont,,                                         ;
                              CLR_BLACK,, PAD_LEFT )
 
                    //-> CPF do Aluno
                    oPrn:Say( nLinNCpf * ResLinha, nColNCpf * ResColuna,      ;
                              ( oDbfCadDig:cAlias )->CIC,                     ;
                               oFont,,                                        ;
                               CLR_BLACK,, PAD_LEFT )
 
                    //-> NOTAS DO MODULO I
                    oPrn:Say( nLinMod1 * ResLinha, nColMod1 * ResColuna,      ;
                              ( oDbfCadDig:cAlias )->MODULOI,                 ;
                               oFont,,                                        ;
                               CLR_BLACK,, PAD_LEFT )
 
                    //-> NOTAS DO MODULO II
                    oPrn:Say( nLinMod2 * ResLinha, nColMod2 * ResColuna,      ;
                              ( oDbfCadDig:cAlias )->MODULOII,                ;
                               oFont,,                                        ;
                               CLR_BLACK,, PAD_LEFT )
 
                    //-> NOTAS DO MODULO III
                    oPrn:Say( nLinMod3 * ResLinha, nColMod3 * ResColuna,      ;
                              ( oDbfCadDig:cAlias )->MODULOIII,               ;
                               oFont,,                                        ;
                               CLR_BLACK,, PAD_LEFT )
 
                    //-> NOTAS DO MODULO IV
                    oPrn:Say( nLinMod4 * ResLinha, nColMod4 * ResColuna,      ;
                              ( oDbfCadDig:cAlias )->MODULOIV,                ;
                               oFont,,                                        ;
                               CLR_BLACK,, PAD_LEFT )
    
                    SKIP
 
                    nLinNome += 0.65  //-> Pula a Linha Para o Novo Nome
                    nLinNCpf += 0.65  //-> Pula a Linha Para o Novo CPF
                    nLinMod1 += 0.65  //-> Pula a Linha Para o Novo ModuloI
                    nLinMod2 += 0.65  //-> Pula a Linha Para o Novo ModuloII
                    nLinMod3 += 0.65  //-> Pula a Linha Para o Novo ModuloIII
                    nLinMod4 += 0.65  //-> Pula a Linha Para o Novo ModuloIV
 
                ENDDO
 
            ENDIF
 
            //-> Faz um Tra‡o Vertical na Frente do Nome do Aluno
            nLinNume :=  0.22
            nColNume := 12.00
            FOR nPulaLinha = 1 TO 36
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF do Aluno
            nLinNume :=  0.22
            nColNume := 14.80
            FOR nPulaLinha = 1 TO 36
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF MODULO I
            nLinNume :=  0.22
            nColNume := 18.20
            FOR nPulaLinha = 1 TO 36
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF MODULO II
            nLinNume :=  0.22
            nColNume := 21.20
            FOR nPulaLinha = 1 TO 36
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente do CPF MODULO III
            nLinNume :=  0.22
            nColNume := 24.30
            FOR nPulaLinha = 1 TO 36
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            oPrn:Say(  4.85 * ResLinha, 0.50 * ResColuna,                     ;
                       "ASSINATURA: ",   oFontDivi,,                          ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  5.45 * ResLinha, 0.50 * ResColuna,                     ;
                       "NOME DO DIRETOR: "+XDIRETOR,                          ;
                       oFontDivi,,                                            ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  6.10 * ResLinha, 0.50 * ResColuna,                     ;
                       "Nº. DA CREDENCIAL: "+XCREDENCIAL,                     ;
                       oFontDivi,,                                 ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  7.35 * ResLinha, 13.85 * ResColuna,         ;
                       "PARA USO DA DIVISÃO DE EDUCAÇÃO " +        ;
                       "DE TRÂNSITO",   oFontDivi,,                ;
                        CLR_BLACK,, PAD_CENTER )
 
            oPrn:Say(  8.10 * ResLinha,  0.50 * ResColuna,         ;
                       "CONFERIDO POR: ",   oFontDivi,,            ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  8.10 * ResLinha, 10.50 * ResColuna,         ;
                       "REGISTRO: ",   oFontDivi,,                 ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say(  8.10 * ResLinha, 19.50 * ResColuna,         ;
                       "PROTOCOLO: ",   oFontDivi,,                ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Box  Embaixo de Conferido/Registro/protocolo
            oPrn:Box(  8.60 * ResLinha,  0.20 * ResColuna,         ;
                      12.20 * ResLinha, 27.70 * ResColuna, oPen3 )
 
            //-> Box Para DE
            oPrn:Box(  8.60 * ResLinha, 10.30 * ResColuna,         ;
                      10.10 * ResLinha, 19.30 * ResColuna, oPen3 )
 
            //-> Box Para A
            oPrn:Box( 10.09 * ResLinha, 10.30 * ResColuna,         ;
                      11.60 * ResLinha, 19.30 * ResColuna, oPen3 )
 
            //-> Faz um Tra‡o Vertical na Frente CONFERIDO
            nLinNume :=  7.85
            nColNume := 10.30
            FOR nPulaLinha = 1 TO 41
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            //-> Faz um Tra‡o Vertical na Frente REGISTRO
            nLinNume :=  7.85
            nColNume := 19.30
            FOR nPulaLinha = 1 TO 41
                oPrn:Say( nLinNume * ResLinha, nColNume * ResColuna, "|",     ;
                          oFont,,                                             ;
                          CLR_BLACK,, PAD_CENTER )
                nLinNume += 0.10
            NEXT nPulaLinha
 
            oPrn:Say(  9.10 * ResLinha, 10.50 * ResColuna,         ;
                       "DE: ",   oFontDivi,,                       ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say( 10.70 * ResLinha, 10.50 * ResColuna,         ;
                       "A: ",   oFontDivi,,                        ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Box Em Cima de CARIMBO E ASSINATURA - Lado Esquerdo da Folha
            oPrn:Box( 11.20 * ResLinha,  0.20 * ResColuna,         ;
                      12.20 * ResLinha, 10.29 * ResColuna, oPen3 )
 
            oPrn:Say( 11.50 * ResLinha,  2.00 * ResColuna,         ;
                       "CARIMBO E ASSINATURA ",   oFontDivi,,      ;
                       CLR_BLACK,, PAD_LEFT )
 
            oPrn:Say( 11.65 * ResLinha, 11.50 * ResColuna,         ;
                       "CARIMBO E ASSINATURA ",   oFontDivi,,      ;
                       CLR_BLACK,, PAD_LEFT )
 
            //-> Observa‡Æo no Rodap‚ do Texto - Segundo Preview
            oPrn:Say( 18.00 * ResLinha, 13.50 * ResColuna,         ;
                      "Caso haja na turma alunos fazendo "    +    ;
                      "o curso  de atualização, não inserir " +    ;
                      "notas e sim se o mesmo foi ou não "    +    ;
                      "aprovado.",  oFont,,                        ;
                      CLR_BLACK,, PAD_CENTER )
 
        ENDPAGE
 
        //-> Final do Relat¢rio... Afff Maria - Esse eu sofri pra caramba
 
    ENDPRINT
 
    oFont:End()
    oFontLogo:End()
    oFontDivi:End()
    oFontList:End()
    oFontCurs:End()
    oFontSubl:End()
 
    oPen1:End()
    oPen2:End()
    oPen3:End()
 
    SELECT ( oDbfTabela:cAlias ) // Seleciona o Alias
 
RETURN NIL
Link to comment
Share on other sites

Na boa... eu acho que se quisermos ajudar, devemos postar uma resposta simples, tipo

"tente utilizar o comando tal

sintaxe do comando tal

um exemplo do comando tal aplicado:

comando tal aplicado"


e boa!

Ficar postando um monte de código só vai complicar a vida de quem tá com dúvida, além de ficar difícil de saber em qual parte do código está a solução... é o que eu acho

Link to comment
Share on other sites

Na boa... eu acho que se quisermos ajudar, devemos postar uma resposta simples, tipo

"tente utilizar o comando tal

sintaxe do comando tal

um exemplo do comando tal aplicado:

comando tal aplicado"

e boa!

Ficar postando um monte de código só vai complicar a vida de quem tá com dúvida, além de ficar difícil de saber em qual parte do código está a solução... é o que eu acho

 

Eduardo a resposta está já nas primeiras linhas, veja:

 

           //-> Box do Logo
            oPrn:Box( 0.23 * ResLinha,  0.20 * ResColuna,                     ;
                      2.41 * ResLinha, 27.70 * ResColuna, oPen3 )

 

abs,

Link to comment
Share on other sites

Arthur

 

Eu trabalho desta forma, funciona para qualquer resolução de dpi deste 300 ate 1800

 


PRINTER oPrinter FROM USER PREVIEW NAME "Resumo "

CURSORWAIT()

   DEFINE FONT oFont  NAME "ARIAL"      size 0,-13 OF oPrinter
   DEFINE FONT oFont2 NAME "ARIAL" BOLD size 0,-16 OF oPrinter
   DEFINE FONT oFont3 NAME "ARIAL" BOLD size 0,-14 OF oPrinter
   DEFINE FONT oFont4 NAME "ARIAL"      size 0,-10 OF oPrinter

   DEFINE PEN oPen1 WIDTH 1 OF oPrinter
   DEFINE PEN oPen2 WIDTH 4 OF oPrinter

       nMargin := int(oPrinter:nLogPixelX()*0.2)
       nWidth  := oPrinter:nHorzRes()
       nHeight := oPrinter:nVertRes()
       nLinha  := oFont:nHeight
       nRow    := 0
       pPagi   := 0

       oPrinter:StartPage()

       pPagi++
       nRow:=nMargin
       nCol:=nMargin
       oPrinter:StartPage()

       oPrinter:Box(nRow+nLinha,ColCerta( 85), nHeight-20, ColCerta(2150) )
       
       for hi:=1 to 10 
           oPrinter:Say(nRow,ColCerta(  95),"Titulo1",oFont4)
           oPrinter:Say(nRow,ColCerta(1250),"Titulo2",oFont4,5,,2)
	   oPrinter:Say(nRow,ColCerta(1450),"Titulo3",oFont4,5,,2)
	   oPrinter:Say(nRow,ColCerta(1850),"Titulo4",oFont4,8,,2)
	   oPrinter:Say(nRow,ColCerta(2050),"Titulo5",oFont4,8,,2)
           nRow+=nLinha
       Next
       
       oPrinter:Endpage()
      oPrinter:Preview()

   CURSORARROW()

DeleteObject(oPrinter)
return NIL



//------------------------------------------------------------------------------
FUNCTION ColCerta(pCol)
Local nCol:=0
//pCol -> 2400 // padrão 300dpi
//X -> nWidth

nCol := (pCol*nWidth)/2400

Return nCol

João Bosco

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...