TPRINTER como configurar los margenes?

Post Reply
leondefrancia
Posts: 33
Joined: Tue Jun 08, 2010 3:34 pm
Location: Rosario, Santa Fe. Argentina

TPRINTER como configurar los margenes?

Post by leondefrancia »

No encuentro documentación acerca de como configurar los margenes en tprinter, alguien me podría ayudar a hacerlo?, necesito que el área imprimible comience más abajo.

Desde ya muchas gracias.
Libreria: FWH/FWHX 9.11 25/November/2009
Harbour: Harbour 2.0.0 Beta2
Compilador: Borland C++ 5.5.1 versión 32 bits
Editor de Recursos: UEstudio 10.0
Gestor de B.D: A.D.A ( Advantage Data Architect )
S.O: Windows XP
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: TPRINTER como configurar los margenes?

Post by karinha »

Mira si ayuda:

Code: Select all

#Define PAD_LEFT            0
#Define PAD_RIGHT           1
#Define PAD_CENTER          2

STATIC FUNCTION IMPRIMIR_CAIXA( 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

    //oImagem:Progress( .f. )

    //-> Logo do Relatorio
    //LFN2SFN( gcFile := "SEMFOTO.JPG" )

    //oImagem:LoadBMP( gcFile )

    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

            //oPrn:SayImage( 0, 0, oImagem )
            //oPrn:SayBitmap( 0, 0, "c:\fwh\bitmaps\fivewin.bmp" )

            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

                /*
                VENDAPRAZO
                CREDCARD
                */

                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 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 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 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 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 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 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
 
João Santos - São Paulo - Brasil
leondefrancia
Posts: 33
Joined: Tue Jun 08, 2010 3:34 pm
Location: Rosario, Santa Fe. Argentina

Re: TPRINTER como configurar los margenes?

Post by leondefrancia »

Gracias Karinha por la respuesta, te cuento lo que me sucede, estoy migrando la impresión del sistema de TDosPrn a TPrinter y necesito que cada reporte coincida exactamente con los anteriores, entonces un listado no es problema pero los comprobantes donde el membrete debe coincidir si o si (ej. una factura) necesito que la impresión comience a una determinada altura.
Lo que proponés lo tengo hecho para hacer coincidir filas/columnas y me funciona bien pero no logra hacer que la impresión comience 1 cm aprox. más abajo.
Libreria: FWH/FWHX 9.11 25/November/2009
Harbour: Harbour 2.0.0 Beta2
Compilador: Borland C++ 5.5.1 versión 32 bits
Editor de Recursos: UEstudio 10.0
Gestor de B.D: A.D.A ( Advantage Data Architect )
S.O: Windows XP
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: TPRINTER como configurar los margenes?

Post by karinha »

Hola, talbéz sea mejor que uses las clases de rafa carmona:

http://forums.fivetechsupport.com/viewt ... =17&t=2501

salud2
João Santos - São Paulo - Brasil
leondefrancia
Posts: 33
Joined: Tue Jun 08, 2010 3:34 pm
Location: Rosario, Santa Fe. Argentina

Re: TPRINTER como configurar los margenes?

Post by leondefrancia »

Gracias otra vez Karinha por tu pronta respuesta, tengo el trabajo terminado y no puedo volver a empezar de nuevo con otra clase. De todas maneras intenté descargarla para ver si usa tprinter y si configura algo distinto pero el link ya no existe.
Existe algún link de descarga dentro de la página de fivetech donde pueda hallarla?

Desde ya muchas gracias.
Libreria: FWH/FWHX 9.11 25/November/2009
Harbour: Harbour 2.0.0 Beta2
Compilador: Borland C++ 5.5.1 versión 32 bits
Editor de Recursos: UEstudio 10.0
Gestor de B.D: A.D.A ( Advantage Data Architect )
S.O: Windows XP
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: TPRINTER como configurar los margenes?

Post by karinha »

João Santos - São Paulo - Brasil
Post Reply