Clipper On Line • Ver Tópico - Win32prn para Iniciantes

Win32prn para Iniciantes

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Win32prn para Iniciantes

Mensagempor Hasse » 27 Ago 2007 19:27

Caros colegas.

Juntando vários exemplos do uso da classe Win32prn() deste Fórum, fiz vários testes que, de uma ou outra forma, podem ser úteis aos colegas iniciantes.

Cito os colegas Marcos Roberto, Marcelog, Sygecom e Angeiras, como fontes de onde tirei dados para este exemplo.

Basta compilar este arquivo, sem qualquer alteração, rodar e ver os resultados.

Todos os testes foram feitos em PDF. Na minha impressora EPSON tive algumas divergências na impressão de retângulos, círculos e elipses.

Aos colegas que puderem e quiserem contribuir com mais exemplos peço entrarem em contato comigo ou postarem ao final deste Post.

/*
/*
   Juntando vários exemplos do uso da classe Win32prn() deste Fórum, fiz vários
   testes que, de uma ou outra forma, podem ser úteis aos colegas iniciantes.
   Cito os colegas Marcos Roberto, Marcelog, Sygecom e Angeiras, como fontes de
   onde tirei exemplos para este exemplo.
   Basta compilar este arquivo, sem qualquer alteração, rodar e ver os resultados.
   Todos os testes foram feitos em PDF.  Na minha impressora EPSON tive algumas
   divergências na impressão de retângulos, círculos e elipses.
   Aos colegas que puderem e quiserem contribuir com mais exemplos peço entrarem
   em contato comigo ou postarem ao final deste Post.
*/
*
*--------------------------------------------------------------------------------------
#define FORM_A4 9
#define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )
#define PS_SOLID   0
#define BLACK           RGB( 0x0 ,0x0 ,0x0 )
#define BLUE            RGB( 0x0 ,0x0 ,0x85 )
#define GREEN           RGB( 0x0 ,0x85,0x0 )
#define CYAN            RGB( 0x0 ,0x85,0x85 )
#define RED             RGB( 0x85,0x0 ,0x0 )
#define MAGENTA         RGB( 0x85,0x0 ,0x85 )
#define BROWN           RGB( 0x85,0x85,0x0 )
#define WHITE           RGB( 0xC6,0xC6,0xC6 )
*
*--------------------------------------------------------------------------------------
FUNCTION Main()
  LOCAL nPrn:=1
  LOCAL aPrn:= GetPrinters()
  CLS
  IF EMPTY(aPrn)
    Alert("No printers installed - Cannot continue")
    QUIT
  ENDIF
  DO WHILE !EMPTY(nPrn)
    CLS
    @ 0,0 SAY 'Programa de teste Classe WIN32PRN(). Escolha uma impressora. ESC' +;
              ' para sair.'
    @ 1,0 TO maxRow(),maxCol()
    nPrn:= ACHOICE(2,1,maxRow()-1,maxCol()-1,aPrn,.T.,,nPrn)
    IF !EMPTY(nPrn)
      PrnTest(aPrn[nPrn])
    ENDIF
  ENDDO
  *
  @ 22,00 say ""
  RETURN(NIL)
*
*--------------------------------------------------------------------------------------
STATIC FUNCTION PrnTest(cPrinter)
   LOCAL oPrinter:= WIN32PRN():New(cPrinter), aFonts, x, nColFixed, nColTTF, ;
                    nColCharSet, aForms
   oPrinter:Landscape:= .F.
   oPrinter:FormType := FORM_A4
   oPrinter:Copies   := 1
   *
   c_string := "Teste-" + LTRIM(STR(YEAR(DATE()))) + "-" + STRZERO(MONTH(DATE()),2) +;
                      "-" + LTRIM(STR(DAY(DATE()))) + "=" + TIME()
   *
   IF !oPrinter:Create()
      Alert("Cannot Create Printer")
   ELSE
      IF !oPrinter:startDoc( c_string )
           Alert("StartDoc() failed")
      ELSE
         nFont := 12
         oPrinter:SetFont('Courier New',12,{1,nFont}, 0, .F., .F.)
   
         FOR N = 1 TO 2
            oPrinter:NewLine()
         NEXT N
         *
         *-----------------------------------------------------------------------------
 
         *================================== Busca de informações =====================
   
         oPrinter:TextOut("Impressora: " + oPrinter:PrinterName + '             ' +;
                  'MaxRow() = '+ltrim(STR(oPrinter:MaxRow(),4)) +;
                  '              MaxCol() = '+ltrim(STR(oPrinter:MaxCol(),4)) , .t.)
   
         oPrinter:NewLine()
         oPrinter:SetFont('Courier New',12,{1,nFont}, 0, .F., .F.)
         
         oPrinter:Textout(STR(oprinter:LineHeight()    ) + "  -altura da linha",.t.)
         oPrinter:Textout(STR(oprinter:CharWidth()     ) + "  -largura da coluna",.T.)
         oPrinter:TextOut(STR(oPrinter:Prow()          ) + "  -Número da linha",.T.)
         oPrinter:TextOut(STR(oPrinter:GetCharWidth()  ) + "  -GetCharWidth",.T.)
         oPrinter:TextOut(STR(oPrinter:GetCharHeight() ) + "  -GetCharHeigth",.T.)
         oPrinter:Textout(STR(oprinter:Prow()          ) + "  -Posição atual da " +;
                          "linha",.T.)
/*
   Onde:
      oPrinter:TextOut("Texto a ser impresso",.T.)
      1-Texto;
      2-Opcional:  Avança linha automaticamente (.T.) ou não (.F.),
                   sendo (.F.) o seu valor Default, quando suprimido.
*/
         *======================= Aqui começa a impressão da 1ª página ================

         oPrinter:NewLine()
         FOR nLinha = 1 TO 45
            oPrinter:SetPrc(oPrinter:Prow()+01, nLinha )
            oPrinter:Textout(ALLTRIM(STR(oPrinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha",.f.)
         NEXT nLinha
         *
         FOR nLinha = 46 TO 100 step 2
            oPrinter:SetPrc(oPrinter:Prow()+01, nLinha )
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha",.f.)
         NEXT nLinha
/*
   Onde:
      oPrinter:SetPrc(nLinhas, nColunas)
      1-Número de linhas do topo da página;
      2-Número de colunas da margem esquerda.
      oPrinter:Prow()      && Linha atual.
      oPrinter:Pcol()      && Coluna atual.
      *
      Observar que as linhas que não cabem na página são descartadas,
      e portanto, é necessário controlar esta situação via software.
      O mesmo acontece com as colunas que ultrapassam a largura da página.
*/
         *======================= Aqui começa a impressão da 2ª página ================
   
         oPrinter:NewPage()
         oPrinter:NewLine()

         oPrinter:SetFont('Courier New',12,{1,12}, 0, .F., .F.)
/*
   Onde:
      oPrinter:SetFont('Courier New',12,{1,12}, 0, .F., .F.)
      1-Nome da fonte;
      2-Altura da fonte;
      3-Multiplicador da fonte (horizontal e vertical);
      4-Largura da fonte - CPI (12 character per inch);
      5-Controla o Negrito-Bold (700) ou normal (.F.);
      6-Controla o sublinhado (.T.) ou não (.F.);
      7-Controla o itálico (.T.) ou não (.F.).
*/
         FOR nLinha = 1 TO 70
           
            IF nLinha = 1
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{1,14}, 0, .F., .F.)
               c_Linha := "-linha, fonte 14, {1,14} (teste 1)"

            ELSEIF nLinha = 04
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{2,14}, 0, .F., .F.)
               c_Linha := "-linha, fonte 14, {2,14} (teste 2)"

            ELSEIF nLinha = 08
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{3,14}, 0, .F., .F.)
               c_Linha := "-linha, fonte 14, {3,14} (teste 3)"

            ELSEIF nLinha = 12
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{4,14}, 0, .F., .F.)
               c_Linha := "-linha, fonte 14, {4,14} (teste 4)"

            ELSEIF nLinha = 16
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{5,14}, 0, .F., .F.)
               c_Linha := "-linha, fonte 14, {5,14} (teste 5)"

            ELSEIF nLinha = 20
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{0,14}, 0, .F., .F.)
               c_Linha := "-linha, fonte 14, {0,14} (teste 6)"

            ELSEIF nLinha = 24
               n_Col   := 0
               oPrinter:NewLine()
               oPrinter:SetFont('Courier New',14,{-1,14}, 0, .F., .F.)
               c_Linha := "-linha normal, fonte 14, {-1,14} (teste 7)"

            ELSEIF nLinha = 28
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{-2,14}, 0, .F., .F.)
               c_Linha := "-linha normal, fonte 14, {-2,14} (teste 8)"

            ELSEIF nLinha = 32
               n_Col   := 0
               oPrinter:SetFont('Courier New',14,{-3,14}, 0, .F., .F.)
               c_Linha := "-linha normal, fonte 14, {-3,14} (teste 9)"

            ELSEIF nLinha = 36
               n_Col   := 05
               oPrinter:NewLine()
               oPrinter:SetColor( BROWN )
               oPrinter:SetFont('Courier New',12,{1,12}, 0, .F., .F.)
               c_Linha := "-linha normal, fonte 12, {1,12} (teste 10)"

            ELSEIF nLinha = 40
               n_Col   := 08
               oPrinter:SetFont('Courier New',12,{1,12}, 0, .T., .F.)
               c_Linha := "-linha normal, fonte 12, {1,12} (teste 11)"

            ELSEIF nLinha = 44
               n_Col   := 11
               oPrinter:SetFont('Courier New',12,{1,12}, 0, .T., .T.)
               c_Linha := "-linha normal, fonte 12, {1,12} (teste 12)"

            ELSEIF nLinha = 48
               n_Col   := 14
               oPrinter:SetFont('Courier New',12,{1,12}, 0, .F., .T.)
               c_Linha := "-linha normal, fonte 12, {1,12} (teste 13)"

            ELSEIF nLinha = 52
               n_Col   := 20
               oPrinter:SetFont('Courier New',14,{1,14}, 0, .T., .F.)
               c_Linha := "-linha normal, fonte 14, {1,14} (teste 14)"

            ELSEIF nLinha = 56
               n_Col   := 24
               oPrinter:SetFont('Courier New',10,{1,14}, 0, .T., .F.)
               c_Linha := "-linha normal, fonte 10, {1,14} (teste 15)"

            ELSEIF nLinha = 60
               n_Col   := 28
               oPrinter:SetFont('Courier New',10,{0,14}, 0, .T., .F.)
               c_Linha := "-linha normal, fonte 10, {0,14} (teste 16)"

            ELSEIF nLinha = 64
               n_Col   := 36
               oPrinter:SetFont('Courier New',10,{-1,14}, 0, .T., .F.)
               c_Linha := "-linha normal, fonte 10, {-1,14} (teste 17)"

            ENDIF
           
            oPrinter:SetPrc(oPrinter:Prow()+01, n_Col )
            oPrinter:Textout(STRZERO(oPrinter:Prow(),02)+ c_Linha,.f.)

         NEXT nLinha
         oPrinter:Italic(.f.)
/*
             Observar que o SUBLINHADO das linhas com fonte 12 em negrito está
             suprimida por sobreposição da linha posterior (seguinte).  Ela esconde
             a linha de acima.  Para contornar isto deve-se diminuir o tamanho da
             fonte, dar um espaço entre as linhas, ou ainda aumentar a altura da linha.
             Basta reduzir a altura da fonte para 10 e o sublinhado já fica visível.
             Vejam que o BOLD e o ITÁLICO também influem no resultado.  Observe os
             teste 14, 15, 16 e 17.
*/

         *======================= Aqui começa a impressão da 3ª página ================

         oPrinter:NewPage()
         oPrinter:NewLine()

         oPrinter:SetFont('Courier New',10,{-1,14}, 0, .F., .F.)

         FOR nLinha = 1 TO 70
           
            IF nLinha = 1
               n_Col   := 0
               oPrinter:SetColor( BLACK )
               c_Linha := "-linha normal, cor BLACK, fonte 10, {-1,14} (teste 1)"

            ELSEIF nLinha = 04
               n_Col   := 4
               oPrinter:SetColor( BLUE )
               c_Linha := "-linha normal, cor BLUE, fonte 10, {-1,14} (teste 2)"

            ELSEIF nLinha = 08
               n_Col   := 8
               oPrinter:SetColor( GREEN )
               c_Linha := "-linha normal, cor GREEN, fonte 10, {-1,14} (teste 3)"

            ELSEIF nLinha = 12
               n_Col   := 12
               oPrinter:SetColor( CYAN )
               c_Linha := "-linha normal, cor CYAN, fonte 10, {-1,14} (teste 4)"

            ELSEIF nLinha = 16
               n_Col   := 16
               oPrinter:SetColor( RED )
               c_Linha := "-linha normal, cor RED, fonte 10, {-1,14} (teste 5)"

            ELSEIF nLinha = 20
               n_Col   := 20
               oPrinter:SetColor( MAGENTA )
               c_Linha := "-linha normal, cor MAGENTA, fonte 10, {-1,14} (teste 6)"

            ELSEIF nLinha = 24
               n_Col   := 24
               oPrinter:SetColor( BROWN )
               c_Linha := "-linha normal, cor BROWN, fonte 10, {-1,14} (teste 7)"

            ELSEIF nLinha = 28
               n_Col   := 0
               oPrinter:SetColor( RED )
               oPrinter:SetFont('Courier New',10,{-1,14}, 0, .T., .F.)
               c_Linha := "-linha sublinhada, cor RED, fonte 10, {-1,14} (teste 8)"

            ELSEIF nLinha = 32
               n_Col   := 04
               oPrinter:SetColor( BROWN )
               oPrinter:SetFont('Courier New',10,{-1,14}, 700, .F., .F.)
               c_Linha := "-linha negrito, cor BROWN, fonte 10, {-1,14} (teste 9)"

            ELSEIF nLinha = 36
               n_Col   := 08
               oPrinter:SetColor( MAGENTA )
               oPrinter:SetFont('Courier New',10,{-1,14}, 0, .F., .T.)
               c_Linha := "-linha itálico, cor MAGENTA, fonte 10, {-1,14} (teste 10)"

            ELSEIF nLinha = 40
               n_Col   := 12
               oPrinter:SetColor( CYAN )
               oPrinter:SetFont('Courier New',10,{-1,14}, 700, .T., .F.)
               c_Linha := "-linha negrito sublinhado, cor CYAN, fonte 10, {-1,14} " +;
                          "(teste 11)"

            ELSEIF nLinha = 44
               n_Col   := 16
               oPrinter:SetColor( GREEN )
               oPrinter:SetFont('Courier New',10,{-1,14}, 700, .T., .T.)
               c_Linha := "-linha negrito sublinhado itálico, cor GREEN, fonte 10, " +;
                          "{-1,14} (teste 12)"

            ELSEIF nLinha = 48
               n_Col   := 20
               oPrinter:SetColor( BLACK )
               oPrinter:SetFont('Courier New',10,{-1,14})
               c_Linha := "-linha negrito sublinhado itálico, cor BLACK, fonte 10, " +;
                          "{-1,14} (teste 13)"

            ELSEIF nLinha = 52
               n_Col   := 24
               oPrinter:Underline(.F.)
               oPrinter:Italic(.T.)
               oPrinter:Bold(0)
               c_Linha := "-linha normal, fonte 10, {-1,14} (teste 14)"

            ELSEIF nLinha = 56
               n_Col   := 28
               c_Linha := "-linha normal, fonte 10, {1,14} (teste 15)"

            ELSEIF nLinha = 60
               n_Col   := 32
               c_Linha := "-linha normal, fonte 10, {0,14} (teste 16)"

            ELSEIF nLinha = 64
               n_Col   := 36
               c_Linha := "-linha normal, fonte 10, {-1,14} (teste 17)"

            ENDIF
           
            oPrinter:SetPrc(oPrinter:Prow()+01, n_Col )
            oPrinter:Textout(STRZERO(oPrinter:Prow(),02)+ c_Linha,.f.)

         NEXT nLinha
         oPrinter:Italic(.f.)

         *======================= Aqui começa a impressão da 4ª página ================

         oPrinter:NewPage()
         oPrinter:NewLine()
         oPrinter:NewLine()

         nAltLin := oPrinter:LineHeight()   && Altura da linha.
         nLarCar := oPrinter:GetCharWidth()   && Largura da fonte em pixels.
         nAltCar := oPrinter:GetCharHeight()   && Altura da fonte em pixels.

         oPrinter:SetFont('Courier New',12,{1,nFont}, 0, .F., .F.)
         oPrinter:TextOut(STR(nLarCar) + "      " + STR(nAltCar) + "      " +;
                          STR(nAltLin), .t.)
         
         nRow := oPrinter:Prow() + 01
         oPrinter:TextOutAt( 01*nLarCar , nRow*nAltCar ,"Coluna: "+;
                  ALLTRIM(STR(oPrinter:Pcol()))+"- Linha: "+;
                  ALLTRIM(STR(oPrinter:Prow()))+"      -Seu texto vai aqui")

         *======================= Aqui começa o uso do TextOutAt() ====================

         nRow := oPrinter:Prow() + 04
         nCol := 20
         oPrinter:TextOutAt( nCol*nLarCar , nRow*nAltCar ,"Coluna: "+;
                  ALLTRIM(STR(oPrinter:Pcol()))+"- Linha: "+;
                  ALLTRIM(STR(oPrinter:Prow()))+"      -A linha seguinte vai aqui")
         
         oPrinter:TextOutAt(oPrinter:MM_TO_POSX(010), oPrinter:MM_TO_POSY(040), +;
                  "Imprimindo a 10mm da borda esquerda e 40mm da borda superior da " +;
                  "folha.")
         
         *======================= Aqui começa o uso do TextAtFont() ===================

         oPrinter:TextAtFont(oPrinter:mm_to_posx(105),oPrinter:mm_to_posy(50), +;
                  "Imprimindo em negrito centralizado na horizontal","Courier New", +;
                   10,,700,,,,,,,2)

         oPrinter:TextAtFont(oPrinter:mm_to_posx(105),oPrinter:mm_to_posy(55), +;
                  "^ Sem negrito à direita do 105","Courier New",10,15,,,,,,,RED,0)

         oPrinter:TextAtFont(oPrinter:mm_to_posx(105),oPrinter:mm_to_posy(60), +;
                  "Em negrito à esquerda do 105 ^","Courier New",10,10,700,,,,,,BLUE,1)

         oPrinter:TextAtFont(oPrinter:mm_to_posx(105),oPrinter:mm_to_posy(65), +;
                  "Em negrito à esquerda do 105 ^","Courier New",10,10,700,.T.,,,,, +;
                  BLUE,1)

         oPrinter:TextAtFont(oPrinter:mm_to_posx(105),oPrinter:mm_to_posy(70), +;
                  "Em negrito à esquerda do 105 ^","Courier New",10,10,700,.T., +;
                  .T.,,,,BLUE,1)

         oPrinter:TextAtFont(oPrinter:mm_to_posx(105),oPrinter:mm_to_posy(75), +;
                  "Em negrito à esquerda do 105 ^","Courier New",10,10,700,.T.,.T.,0, +;
                  .T.,,RED,1)
/*
    Onde:
      1-Imprime a 105mm da margem esquerda;
      2-Na linha 2;
      3-Texto;
      4-Fonte Courier New;
      5-Tamanho da fonte, 10;
      6-Divisor do tamanho da fonte;
      7-O valor 700 indice Bold (negrito) ou (.F.);
      8-Controla o sublinhado (.T.) ou (.F.);
      9-Controla o itálico (.T.) ou (.F.);
      10-nCharSet;
      11-Nova linha (.T.) ou não (.F.)
      12-Atualiza PosX (.T.) ou não (.F.)
      13-Controla a cor de impressão;
      14-O valor "2" indica impressão centralizada, "0" o texto seria
         impresso à esquerda da posição 105mm, e "1" o texto estaria à
         direita do ponto 105 mm.
*/
         *======================= Aqui começa a impressão de números ==================

         oPrinter:NewLine()
         nNum := 95350
         oPrinter:TextOut(TRANSFORM(nNum,"999,999.99"),.T.)
         oPrinter:TextOut(STR(nNum),.T.)

/*
   O sistema Win32prn não está preparado para imprimir números, portanto,
   todos os números deverão sempre ser transformados em string.
*/
         *=============== Aqui começa impressão de linhas de alturas diversas =========

         oPrinter:SetFont('Courier New',7,{1,18})
         FOR nLinha = 1 TO 5
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 1",.T.)
         NEXT nLinha

         oPrinter:SetFont('Courier New',7,{2,18})
         FOR nLinha = 1 TO 5
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 2",.T.)
         NEXT nLinha

         oPrinter:SetFont('Courier New',10,{2,18})
         FOR nLinha = 1 TO 5
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 3",.T.)
         NEXT nLinha

         oPrinter:SetFont('Courier New',10,{3,50})
         FOR nLinha = 1 TO 5
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 4",.T.)
         NEXT nLinha

         oPrinter:SetFont('Courier New',16,{3,18})
         FOR nLinha = 1 TO 5
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 5",.T.)
         NEXT nLinha

         FOR nLinha = 1 TO 5
            oPrinter:SetPrc(oPrinter:Prow()+01, 05 )
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 6",.T.)
         NEXT nLinha

         oPrinter:SetFont('Courier New',20,{3,18})
         oPrinter:Bold(700)
         oPrinter:Underline(.T.)
         FOR nLinha = 1 TO 5
            oPrinter:SetPrc(oPrinter:Prow()+01, 02 )
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 7",.T.)
         NEXT nLinha
         
         *======================= Aqui começa a impressão da 5ª página ================

         oPrinter:NewPage()
         oPrinter:NewLine()

         oPrinter:SetFont('Lucida Console',18, 0)
         FOR nLinha = 1 TO 5
            oPrinter:SetPrc(oPrinter:Prow()+02, 02 )
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 1",.T.)
         NEXT nLinha

         oPrinter:SetFont('Times',30, {3,18})
         oPrinter:Underline(.F.)
         FOR nLinha = 1 TO 5
            oPrinter:SetPrc(oPrinter:Prow()+02, 02 )
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 2",.T.)
         NEXT nLinha

         oPrinter:Underline(.T.)
         FOR nLinha = 1 TO 5
            oPrinter:SetPrc(oPrinter:Prow()+02, 02 )
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 3",.T.)
         NEXT nLinha

         oPrinter:SetFont('Times New Roman',12,{1,nFont}, 0, .F., .F.)
         FOR nLinha = 1 TO 5
            oPrinter:Textout(ALLTRIM(STR(oprinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha 4",.T.)
         NEXT nLinha
/*
   Onde:
      1-Nome da Fonte;
      2-Tamanho vertical dos caracteres;
      3-Expansão horizontal dos caracteres;
      4-Compressão horizontal dos caracteres.
   OBS: Observar quando o tamanho da fonte é maior que altura da linha, a linha
   atual se sobrepõe à linha anterior, apagando parte dela.  Dar 1 ou 2 linhas
   em branco é uma das soluções.
*/

/*
   oPrinter:SetPrintQuality(4)
   
   Para setar a qualidade de impressão.  Este recurso não é igual para qualquer
   impressora.
   Há necesidade de teste para cada uma.  Este comando deve ser inserido antes
   da criação do documento, ou seja, antes de 'oPrinter:Create()'.
   Valores:
      1-Qualidade fotográfica;
      2-Qualidade carta;
      3-Qualidade média;
      4-Qualidade rascunho.
*/

         *======================= Aqui começa a impressão da 6ª página ================

         oPrinter:NewPage()
         oPrinter:NewLine()

         *============ Impressão do Códigos de Barras 'Bar Code' ======================

         oPrinter:SetColor( BLACK )

         oPrinter:SetPrc(oPrinter:Prow()+10, 05 )
         oPrinter:SetFont('Barcode Font', 28, 0 )
         oPrinter:TextOut(" *6920897718380*  " )
         oPrinter:SetFont('Courier New', 12, 0 )
         oPrinter:SetPrc(oPrinter:Prow(), 40 )
         oPrinter:TextOut("Barcode Font, 28, 0")

         oPrinter:NewLine()
         oPrinter:NewLine()
         oPrinter:NewLine()
         oPrinter:SetFont('Code39 Regular', 18, 0 )
         oPrinter:TextOut(" *6920897718380*  " )
         oPrinter:SetFont('Courier New', 12, 0 )
         oPrinter:SetPrc(oPrinter:Prow(), 40 )
         oPrinter:TextOut("Code39 Regular, 18, 0")

         oPrinter:NewLine()
         oPrinter:NewLine()
         oPrinter:NewLine()
         oPrinter:SetFont('Code39 Regular', 18, 5 )
         oPrinter:TextOut(" *6920897718380*  " )
         oPrinter:SetFont('Courier New', 12, 0 )
         oPrinter:SetPrc(oPrinter:Prow(), 40 )
         oPrinter:TextOut("Code39 Regular, 18, 5")
/*
   Onde:
      1-Nome da Fonte;
      2-Tamanho vertical da fonte;
      3-Tamanho horizontal da fonte;
*/
         *============ Impressão do Códigos de Barras '3 de 9 Barcode' ================

         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(100 ), +;
                              '1234567890', '3 of 9 Barcode', 28, 05 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 120 ) , +;
                  oPrinter:MM_TO_POSY(100 ),'3 of 9 Barcode, 28, 05', +;
                  'Courier New', 12, 0 )

         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(120 ), +;
                              '1234567890', '3 of 9 Barcode', 40, 0 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 120 ) , +;
                  oPrinter:MM_TO_POSY(120 ),'3 of 9 Barcode, 40, 0', +;
                  'Courier New', 12, 0 )

         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(140 ), +;
                              '1234567890', '3 of 9 Barcode', 40, 10 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 120 ) , oPrinter:MM_TO_POSY(140 ), +;
                              '3 of 9 Barcode, 40, 10','Courier New', 12, 0 )

         *============ Impressão do Códigos de Barras 'Barcoding' =====================

         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(160 ), +;
                              '1234567890', 'Barcoding', 40, 0 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 120 ) , +;
                  oPrinter:MM_TO_POSY(160 ),'Barcoding, 40, 0','Courier New', 12, 0 )

         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(180 ), +;
                              '1234567890', 'Barcoding', 40, 5 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 120 ) , oPrinter:MM_TO_POSY(180 ), +;
                              'Barcoding, 40, 5','Courier New', 12, 0 )

         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(200 ), +;
                              '1234567890', 'Barcoding', 40, 10 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 120 ) , +;
                  oPrinter:MM_TO_POSY(200 ),'Barcoding, 40, 10','Courier New', 12, 0 )

         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(220 ), +;
                              '1234567890', 'Barcoding', 40, 15 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 120 ) , +;
                  oPrinter:MM_TO_POSY(220 ),'Barcoding, 40, 15','Courier New', 12, 0 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 20 ) , oPrinter:MM_TO_POSY(240 ), +;
                              'As fontes dos diversos Códigos de Barra podem ser ' +;
                              'baixados de:','Courier New', 12, 0 )
         oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 20 ) , oPrinter:MM_TO_POSY(245 ), +;
                              'http://www.netfontes.com.br/fontes.php/categ_7.10' +;
                              '.htm','Courier New', 12, 0 )
/*
   Onde:
      1-Coordenada horizontal em mm;
      2-Coordenada vertical em mm;
      3-Texto;
      4-Nome da Fonte;
      5-Tamanho da fonte;
      6-Divisor da largura da Barra.

        As Fontes dos Códigos de Barras podem ser baixadas de:
      http://www.netfontes.com.br/fontes.php/categ_7.10.htm
*/

         *======================= Aqui começa a impressão da 7ª página ================

         oPrinter:NewPage()

         oPrinter:Box(  300,  200,  800, 1000 )
         oPrinter:Box(  600, 1200, 1500, 2000 )
         oPrinter:Box(  600, 2200, 1500, 3000, 200, 600 )

         oPrinter:SetFont('Courier New', 10, 0 )
         oPrinter:SetPrc( 04 , 20 )
         oPrinter:TextOut("X(coluna) -> 300 , Y(linha) -> 200   x   " +;
                          "X(coluna) -> 800 , Y(linha) -> 1000",.T.)
         oPrinter:SetPrc( 09 , 20 )
         oPrinter:TextOut("X(coluna) -> 600 , Y(linha) -> 1200   x   " +;
                          "X(coluna) -> 1500 , Y(linha) -> 2000",.T.)
         oPrinter:SetPrc( 13 , 20 )
         oPrinter:TextOut("X(coluna) -> 600 , Y(linha) -> 1200   x   " +;
                          "X(coluna) -> 1500 , Y(linha) -> 2000",.T.)
         oPrinter:SetPrc( 14 , 20 )
         oPrinter:TextOut("Arred. hor. 200, Arred. vert. 600",.T.)
/*
   Onde temos valores em pixels:
      Box(nX1,    nY1,   nX2,    nY2,   nWidth, nHeight);
          coluna, linha, coluna, linha, nWidth, nHeight;
      exemplificando o tamanho do BOX acima:
      500 x 800, ou seja,  800-300=300(largura)  x  1000- 200=800(altura);
      900 x 800, ou seja, 1500-600=900(largura)  x  2000-1500=800(altura);
      nWidth  -> arredondamento na linha horizontal;
      nHeight -> arredondamento na linha vertical.
*/
         nPosY := oPrinter:PosY
         nPosX := oPrinter:PosX
         oPrinter:SetPrc( 18 , 05 )
         oPrinter:TextOut("'oPrinter:posY' determina a posição atual da coordenada " +;
                          "Y -> linha)", .T.)
         oPrinter:SetPrc( 19 , 05 )
         oPrinter:TextOut("'oPrinter:posX' determina a posição atual da coordenada " +;
                          "X -> coluna)", .T.)

         nPosCol := 100            && Início horizontal do BOX;
         nLin    := 700            && Altura do BOX;
         nCol    := 300            && Largura do BOX.
         nX1     := oPrinter:PosX + nPosCol
         nY1     := oPrinter:PosY
         nX2     := nX1 + nCol
         nY2     := nY1 + nLin
         oPrinter:SetPrc( 23 , 10 )
         oPrinter:TextOut("Coordenadas:  " + str(nX1) + str(nY1) + str(nX2) + ;
                          str(nY2), .T.)
         oPrinter:Box(  nX1 ,  nY1 ,  nX2,  nY2 )

         *======================= Aqui começa a impressão ARC =========================

         oPrinter:Arc(      600, oPrinter:PosY+200,  800, oPrinter:PosY+700)
         oPrinter:SetPrc( 27 , 10 )
         oPrinter:TextOut("Coordenadas:  " + str(600) + str(oPrinter:PosY+200) + ;
                          str(800) + str(oPrinter:PosY+700), .T.)

         *======================= Aqui começa a impressão ELLIPSE =====================

         oPrinter:Ellipse( 1000, oPrinter:PosY+200, 1600, oPrinter:PosY+500)
         oPrinter:SetPrc( 30 , 20 )
         oPrinter:TextOut("Coordenadas:  " + str(1000) + str(oPrinter:PosY+200) +;
                          str(1600) + str(oPrinter:PosY+500), .T.)

         *======================= Aqui começa a impressão FILLTEXT ====================

         oPrinter:FillRect(2000, oPrinter:PosY+200, 3000, oPrinter:PosY+600, RED)
         oPrinter:SetPrc( 33 , 35 )
         oPrinter:TextOut("Coordenadas:  " + str(2000) + str(oPrinter:PosY+200) +;
                          str(3000) + str(oPrinter:PosY+600), .T.)

/*
   Notar que os RETÂNGULOS, ELIPSES, etc. desta última página podem necessitar
   de alguns acertos nas coordenadas, visto que foram estabelecidas para documento
   PDF.   Para minha impressora EPSON não produziu o mesmo resultado.
*/

        *======================= Aqui começa a impressão de Imagens ===================

         oBmp      := Win32Prn():new()
         cFileName := "E:\xHarbour\samples\pegged\recurses\marked.bmp"
         oBmp      := Win32Bmp():new()
         IF .NOT. oBmp:loadFile( cFileName )
           Alert( cFileName + " NÆo encontrado..." )
         ELSE
           oBmp:draw( oPrinter,  { 1200, 7500, 1800, 1500 } )
           oPrinter:SetFont('Courier New',14,{1,14}, 0, .F., .F.)
           oPrinter:SetPrc(oPrinter:Prow()+08, 40 )
           oPrinter:TextOut("Ícone impresso nas coordenadas:  horizontal 1200,  vertical 7500", .T.)
           oPrinter:SetPrc(oPrinter:Prow()+01, 40 )
           oPrinter:TextOut("Tamanho do ícone:                horizontal 1800,  vertical 1500", .T.)
         ENDIF

         *======================  Usando sub-rotina para a impressão da imagem  ========
         
         cBmpFile := "E:\xHarbour\samples\pegged\recurses\help.bmp"
         PrintBitMap( oPrinter, cBMPFile )

      oPrinter:EndDoc()
    ENDIF
    oPrinter:Destroy()
  ENDIF

RETURN(NIL)
*
*------------------------------------------------------------------------------
procedure PrintBitMap( oPrn, cBitFile )
LOCAL oBMP

IF EMPTY( cBitFile )

            && Pode-se incluir aqui uma imagem alternativa.

ELSEIF !FILE( cBitFile )
   Alert( "Arquivo " + cBitFile + " não encontrado." )
ELSE
   oBMP:= Win32BMP():new()
   IF oBmp:loadFile( cBitFile )
      oBmp:Draw( oPrn, { 200,10000, 1000, 750 } )
     
            && Esta alternativa abaixo que também pode ser usada.
     
      oBmp:Rect:= { 2000,10000, 1000, 750 }
      oPrn:DrawBitMap( oBmp )

   ENDIF
   oBMP:Destroy()
ENDIF
RETURN
*
*---------------------------------------------------------------------------------------------------


Bom trabalho... e Sucesso.
Editado pela última vez por Hasse em 26 Jan 2008 15:25, num total de 1 vezes
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

Mensagempor sygecom » 27 Ago 2007 22:56

Hasse, belo trabalho...se o colega me permite só falta duas coisa uma que seria junto ai um exemplo de impressão de imagem que na seção codigo fonte e eu postei um exemplo...e outra é que esse belo trabalho que vc teve deveria esta na seção tutorial ou codigo fonte...espero que um dos moderadores coloque em uma das das seções......mais uma vez Parabens... :{

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Mensagempor Hasse » 28 Ago 2007 21:39

Boa noite Sygecom.

Obrigado. Vindo de um Mestre do Fórum, considero uma bela recompensa e reconhecimento.

Acabei esquecendo da impressão de imagens. Prometo que vou tratar deste detalhe.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

Mensagempor clodoaldomonteiro » 06 Dez 2007 23:49

Hasse!
Peguei seu teste para poder implementar nos meus sistemas, tô começando agora, e queria saber se a WIN32PRN.LIB tem uma função para mostrar uma janela de escolha de impressora, propriedades dela, quantidade de cópia, visualizar e outras coisa mais.

Grato pela atenção.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

perg

Mensagempor tonyx » 07 Dez 2007 07:47

ainda nao usei win32prn estou usando direto para impressora ou doc
pergunda_01 = e possivel colocar logo feito em RTF OU BMP - E DEPOIS COLOCAR O TEXTO, E IMPRIMIR EM QUALQUER IMPRESSORA DEPOIS
perg_02 = enviar arquivo via email ????

----------- atualmente estou montado tudo em RTF e mandando para o WORD ------

ALQUEM TEM ALGO SEMELHANTE ???
tonyx
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 301
Data de registro: 07 Jul 2004 15:26
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor sygecom » 07 Dez 2007 10:10

e possivel colocar logo feito em RTF OU BMP - E DEPOIS COLOCAR O TEXTO, E IMPRIMIR EM QUALQUER IMPRESSORA DEPOIS

Em .BMP sim é possivel, de uma olhada no link abaixo:
http://www.pctoledo.com.br/forum/viewtopic.php?t=5764

enviar arquivo via email ????

Sim use a função HB_SENDMAIL()
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Mensagempor Hasse » 07 Dez 2007 11:58

Olá clodoaldomonteiro.

A própria rotina postada já tem um módulo, nas linhas 28 a 44, onde você faz a escolha de uma impressora das instaladas.

O número de cópias é setado com a varável "copies". Veja na linha 55 do exemplo.

A qualidade da impressão pode ser setada. Veja na linha 535 do exemplo.

Visualizar somente via PDF / AcrobatReader, usando algum criador de PDF disponível no Internet. Eu uso justamente um que se chama PDFCreator.

"Outras coisas mais" é muito vago, mas o exemplo contempla praticamento todos os recursos disponíveis na versão que eu tenho. Pode ser que já haja alguma nova implementação, mas seria preciso atualizar o Win32Prn e verificar.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

Mensagempor clodoaldomonteiro » 07 Dez 2007 16:37

Hum entendi!

Eu devo montar uma janela mostrando essas informações ao usuário, daí ele decide o que fazer, escolhe a impresora, diz quantas cópias quer, se quer tipo paisagem e outras coisa mais. hehe
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Mensagempor Luciano Bonfim » 07 Dez 2007 21:43

Caro Leonardo,

só uma pergunta, porque vc usa oprinter:SetPrintQuality(-1)?

eu tava usando esse -1 aqui porque peguei do seu exemplo e penei pra descobrir que era por causa dele que minhas letras estavam menores, depois que coloquei oprinter:SetPrintQuality(1) ficou tudo perfeito, igual o PRWIN do vagucs.

tem algum motivo especial para usar o -1?

Muito Obrigado!!!
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar de usuário

Luciano Bonfim
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 414
Data de registro: 23 Ago 2007 09:34
Cidade/Estado: Rio de Janeiro / São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor sygecom » 07 Dez 2007 22:04

Impressão em modo rascunho. imprime bem rapido !!!
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Mensagempor Luciano Bonfim » 07 Dez 2007 22:07

mas pelo que eu vi modo rascunho é 4 e näo -1.

1-Qualidade fotográfica;
2-Qualidade carta;
3-Qualidade média;
4-Qualidade rascunho.

ai quando coloca -1 "escangalha" tudo, quer dizer, cabe até mais colunas no papel, mas fica pequeno demais pra ler....

faz esse teste ai no seu sistema, tira o -1 e coloca 1 e vê oq acontece...

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar de usuário

Luciano Bonfim
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 414
Data de registro: 23 Ago 2007 09:34
Cidade/Estado: Rio de Janeiro / São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor sygecom » 08 Dez 2007 20:18

De uma conferida em xharbour\source\rtl\win32prn.prg
/* print qualities */
#define DMRES_DRAFT         (-1)
#define DMRES_LOW           (-2)
#define DMRES_MEDIUM        (-3)
#define DMRES_HIGH          (-4)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Mensagempor Luciano Bonfim » 09 Dez 2007 10:47

Realmente muito estranho... peguei essas definições no exemplo do início do post, mas é estranho ver que o -1 e o 1 se comportam de maneira diferente... aqui no meu caso funcionou muito bem com o 1.

é só uma questão de curiosidade!!

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar de usuário

Luciano Bonfim
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 414
Data de registro: 23 Ago 2007 09:34
Cidade/Estado: Rio de Janeiro / São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor Hasse » 09 Dez 2007 14:28

Boa tarde caros colegas.

Referente ao comando oprinter:SetPrintQuality( ??? ):

Eu também tive alguns problemas deste tipo.

Finalmente descobri que cada MARCA de impressora, e quem sabe até modelo, reage de forma própria ao comando. Em vários contatos mantidos com os mestres do Fórum, nada ficou esclarecido.

Então, é necessário que cada um descubra a melhor form de usá-lo em cada caso.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

Mensagempor Dércio_Luiz_Zanatta » 18 Dez 2007 13:13

Tem como imprimir para arquivo usando o win32prn ?
Senão, Tem outro jeito ?
Dércio_Luiz_Zanatta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 153
Data de registro: 11 Jan 2006 14:37
Cidade/Estado: Ibirubá - RS
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro