Impressão em Portas USB - classe Win32Prn / WinPrn

12-12-2015 10:55

Win32Prn ()

Cria um novo objeto Win32Prn.
Sintaxe:
Win32Prn (): new ([<cPrinterName>]) -> oWin32Prn

Argumentos:
<cPrinterName>
Esta é uma cadeia de caracteres que contém o nome da impressora a ser usada para a impressão. O padrão é o valor de retorno de "GetDefaultPrinter ()" (outra função que captura todas as impressoras disponíveis e o usuário ao selecionar uma delas, deve ser armazenada na tal variável [<cPrinterName>]. Traduzindo: uma variável do tipo caractere que contenha a impressora previamente escolhida que irá imprimir o relatório.

Retorno:
A função retorna um novo objeto Win32Prn e método: new () inicializa o objeto.
Descrição:
Os objetos da classe Win32Prn fornecem os meios para impressão utilizando o dispositivo de interface gráfica do Windows (GDI). Por esta razão, um aplicativo usando objetos Win32Prn deve ser criado como uma aplicação GUI. Aplicações do modo de texto ou aplicativos de console, não pode usar a classe Win32Prn.
Para que um objeto Win32Prn seja inicializado, o primeiro comando/função/método deve ser: ":create()" que é um método.

Os métodos são sempre seguidos do array (matriz) que os recebe, e todos devem estar ligados a ela com dois pontos verticais (:).
Exemplo: oPRN:create(). Aqui o "oPRN" é o nome que você escolhe para a matriz que formará os objetos de impressão. Lembre-se que o "dois pontos" tem que estar sem espaço entre a "matriz" e o nome do "objeto".

Ah! um grande detalhe sobre o método/objeto ":create()". Antes deste método ser chamado, um trabalho de impressão pode ser configurado com variáveis ​​de instância de um objeto Win32Prn. Eles definem o formato do papel, orientação ou o número de cópias a serem impressas de impressão. Um objeto Win32Prn só pode ser usado para a impressão, quando o seu método ":create ()" for chamado.
Um trabalho de impressão é iniciado com o método ":StartDoc()", só depois que os vários métodos de saída de impressão podem ser chamados. Eles definem a saída real que aparece no papel. : StartDoc () define o nome do documento para imprimir para a impressora do Windows GDI spooler e inicia um trabalho de impressão. O trabalho de impressão deve ser terminado com método ":EndDoc()". A saída de impressão é enviada para a impressora depois que ":EndDoc ()" for chamado.
Quando um trabalho de impressão for concluído, um objeto Win32Prn deve liberar recursos do sistema GDI com a chamada ao objeto ":destroy". Como resultado, o seguinte padrão de programação deve ser aplicado para a impressão bem sucedida GDI:
   
oPrinter:= Win32Prn (): new () // cria o objeto
   
oPrinter:create() // solicitações de recursos do sistema
   
oPrinter:SstarDoc () // começa um documento
   
oPrinter:TextOut ("Olá Pessoal, este é um exemplo de impressão produzido pela MVinfo Sistemas e Automação!") // métodos de saída de impressão (imprime na impressora selecionada a frase que está entre "aspas").
   
oPrinter:EndDoc () // termina a definição e impressões de documentos.
   
oPrinter:destroy () // libera recursos do sistema

Sistema de coordenadas para a impressão GDI:
O sistema de coordenadas tem sua origem no canto superior esquerdo da página. As coordenadas X e Y são medidos em pixels. O X coordena os aumentos da esquerda para a direita (coordenada horizontal), e coordenada Y aumenta a partir da parte superior para a parte inferior de uma página (coordenada vertical).
Para suportar o estilo de impressão matricial DOS Clipper, a classe Win32Prn tem métodos que permitem uma linha / coluna orientada posicionamento da saída de impressão. Estes métodos emular funções do mesmo nome, como: Prow (),: PCOL () ou: setPrc ().
Fontes:
A fonte padrão é uma fonte compatível DOS Clipper fixo (Courier New). Uma lista de todas as fontes disponíveis pode ser obtida com o método ":getFonts()". O texto é impresso usando a fonte selecionada no momento, que é definido com o método ":setFont ()".
Impressão de texto:
O texto é de saída na posição de impressão atual com o método ":TextOut ()", ou em um especial X / Y coordenar com método ":textOutAt ()". A cor do texto pode ser seleccionada com o método ": setColor ()".
Linhas de impressão:
Uma variedade de métodos estão disponíveis para desenhar elementos gráficos básicos, tais como ":arc ()", ":box ()" ou ":line ()". A cor e o estilo de linha para estes elementos gráficos é definida com método ":setPen ()". Este método cria uma caneta capaz de desenhar linhas.
Cores:
As cores para a impressão GDI deve ser fornecida como valores numéricos de cores RGB. As modo console SetColor (cordas) não pode ser usado como definição de cor. Valores de cores RGB são calculados a partir de três valores numéricos entre 0 e 255. Eles definem a intensidade de vermelho, verde e azul. Um valor de cor RGB pode ser calulated como se segue:
   
FUNCTION RGB (nRed, nGreen, nBlue)
   
RETURN (nRed + (nGreen * 256) + (nBlue * 65536))

Configurações de cor e de texto:
: bitmapsOk
Indica se as imagens bitmap podem ser impressos.
: BkColor
Numérico valor cor de fundo.
: NUMCOLORS
Número de cores suportados pelo dispositivo GDI (impressora).
: pencolor
Valor de cor numérico de caneta atual.
: penstyle
Estilo numérico de caneta atual.
: penWidth
Largura numérica de caneta atual.
: posX
Posição atual da cabeça de impressão no sentido X (horizontal).
: posY
Posição atual da cabeça de impressão no sentido Y (vertical).
: textAlign
Valor numérico para o alinhamento do texto.
: textColor
Valor numérico para a cor do texto (em primeiro plano).

Configurações de fonte:
: CharHeight
Altura numérico de caracteres para a fonte atual.
: charWidth
Largura numérica de caracteres para a fonte atual.
: fontName
Cadeia de caracteres descrevendo a fonte selecionada no momento.
: fontPointSize
Tamanho de ponto numérico da fonte atual.
: fontWidth
Matriz descrevendo a largura da fonte atual.
:lineHeight
Altura da linha numérica de fonte atual.
: pixelsPerInchX
Número de pixels por polegada na direção X (horizontal)
: pixelsPerInchY
Número de pixels por polegada na direção Y (vertical)
: setFontOk
Indica sucesso na fixação de uma fonte.

Métricas Página:
: BottomMargin
Margem inferior da página numérico.
:leftMargin
Numérico margem esquerda da página.
: pageHeight
Dimensão numérica página na direção Y (vertical ou altura).
: pageWidth
Dimensão numérica principal na direcção X (horizontal ou largura).
: rightMargin
Margem direita numérico de uma página.
: TopMargin
Margem superior numérico de uma página.

Configuração de trabalho de impressão:
: binNumber
Papel bin numérico a ser usado para a impressão.
: copies
Número de cópias a imprimir.
: FormType
Formato de papel numérico para imprimir.
:landScape
A orientação da impressão lógica.

Configuração da impressora:
: havePrinted
Bandeira lógico que indica se o texto ou bitmap foi impresso.
: hPrinterDc
Handle numérico para o contexto de dispositivo de impressora.
: printerName
Cadeia de caracteres descrevendo a impressora selecionada no momento.
:printing
"Flag" lógico que indica se um trabalho de impressão está em andamento.

Compatibilidade Clipper DOS:
: inch_To_PosX (<nInches>) -> nPosX
Calcula uma posição horizontal X de polegadas.
: inch_To_PosY (<nInches>) -> nPosY
Calcula posição vertical Y de polegadas.
: mm_To_PosX (<nMilliMeters>) -> nPosX
Calcula uma posição horizontal X de milímetros.
: mm_To_PosY (<nMilliMeters>) -> nPosY
Calcula posição vertical Y de milímetros.
: MAXCOL () -> nMaxCol
Número de caracteres de fonte fixa que se encaixam em uma linha
: maxRow () -> nMaxRow
Número de linhas de texto caber em uma página.
: PCOL () -> nPrinterColumn
Emula a função PCOL ().
: Prow () -> nPrinterRow
Emula a função de proa ().
: setPrc (<nrow>, <nCol>) -> NIL
Altera a posição de impressão atual usando coordenadas de linha / coluna.

Métodos de documentos:
: ENDDOC ([<lAbortDoc>]) -> lSuccess
Termina o trabalho de impressão atual.
: EndPage ([<lNewPage>]) -> lSuccess
Marca o fim de uma página.
: newLine () -> nPosY
Move a actual posição de impressão para o início da próxima linha.
: newPage () -> lSuccess
Inicia uma nova página.
: StartDoc ([<cDocumentName>]) -> lSuccess
Encarrega o spooler para começar um novo documento.
: Startpage () -> lSuccess
Inicia uma nova página e reconfigura as configurações de página.

Métricas da Fonte e do texto:
: getCharHeight () -> nPixels
Retorna a altura média de caracteres da fonte atual em pixels.
: GetCharWidth () -> nPixels
Retorna a largura de caractere médio da fonte atual, em pixels.
: getTextHeight (<cString>) -> nPixelsHeight
Retorna a altura de uma cadeia de caracteres em pixels.
: getTextWidth (<cString>) -> nPixelsWidth
Retorna a largura de uma cadeia de caracteres em pixels.

Métodos de fonte:
: bold ([<nNewFontWeight>]) -> nOldFontWeight
Consultas ou altera a espessura da fonte para impressão negrito.
: charSet ([<nNewCharSet>]) -> nOldCharSet
Consultas ou muda o conjunto de caracteres para impressão de texto.
: getFonts () -> aFontInfo
Consulta sobre as fontes disponíveis.
: itálico ([<lNewSetting>]) -> lOldSetting
Consultas ou jogos de impressão itálico.
: underline ([<lNewSetting>]) -> lOldSetting
Consultas ou conjuntos sublinhou a impressão.
: setDefaultFont () -> lSuccess
Define a fonte padrão.
: setFont (...) -> lSuccess
Seleciona a fonte atual.

Métodos de impressora:
: GetDeviceCaps (<nCaps>) -> nDeviceCaps
Consultas recursos do dispositivo.
: setDuplexType ([<nNewDuplex>]) -> nOldDuplex
Consultas ou muda o modo de impressão duplex.
: setPrintQuality ([<nNewPrintQuality>]) -> nOldPrintQuality
Consultas ou muda a qualidade de impressão.

Métodos de saída de impressão:
: arc (<nx1>, <NY1>, <NX2>, <ny2>) -> lSuccess
Imprime um arco.
:box (...) -> lSuccess
Imprime uma caixa.
: drawBitmap (<oWin32Bmp>) -> lSuccess
Imprime uma imagem bitmap.
: ellipse (<nx1>, <NY1>, <NX2>, <ny2>) -> lSuccess
Imprime uma elipse.
: fillRect (...) -> NIL
Imprime um retângulo preenchido.
: line (<nx1>, <NY1>, <NX2>, <ny2>) -> lSuccess
Imprime uma linha
: SetBkMode (<nMode>) -> lSuccess
Seleciona o modo de cor de fundo mix.
: setColor (<nClrText>, [<nClrPane>], [<nAlign>}) -> NIL
Define a cor do texto e alinhamento.
: setPen (<nStyle>, <nWidth>, <nColor>) -> nPenHandle
Define a caneta para desenhar linhas.
: SetPos ([<nXPos>], [<>] nYPos) -> aOldPos
Consultas ou altera a posição de impressão atual.
: textAtFont (...) -> lSuccess
Impressões de texto na posição X especificado / Y e restaura as configurações de fontes anteriores.
: TextOut (...) -> lSuccess
Impressões de texto na posição de impressão atual.
: textOutAt (...) -> lSuccess
Impressões de texto na posição X / Y especificado.

Os recursos do sistema:
: create () -> lSuccess
Solicita recursos do sistema para uma impressora GDI.
: destroy () -> lSuccess
Lançamentos recursos do sistema de uma impressora GDI.

Informações:
Veja também na internet (ou quando tivermos capacidade de tradução): SET PRINTER, Win32Bmp ()
Header: wingdi.ch
source: rtl\win32prn.prg
LIB: xhb.lib
DLL: xhbdll.dll

Exemplo (bem básico):
// O exemplo demonstra a saída de impressão básico usando diferentes
// Fontes, cores e elementos gráficos.
// Nota: criar o EXE usando o "-gui switch"

   
#include "WinGdi.ch"
  
#define RGB_BLACK RGB (0, 0, 0)
   
#define RGB_RED RGB (255, 0, 0)
   
#define RGB_GREEN RGB (0255, 0)
   
#define RGB_BLUE RGB (0, 0255)
   
#define RGB_CYAN RGB (0.255.255)
   
#define RGB_YELLOW RGB (255.255, 0)
   
#define RGB_MAGENTA RGB (255, 0255)
   
#define RGB_WHITE RGB (255,255,255)

   PROCEDURE Main
      LOCAL cPrinter := "EPSON Stylus DX5000 Series"
      LOCAL oPrinter
      LOCAL aFonts, cFont, nFont

      // Create printer object and configure print job
      oPrinter           := Win32Prn():new( cPrinter )
      oPrinter:landscape := .F.
      oPrinter:formType  := DMPAPER_A4
      oPrinter:copies    := 1

      // Create device context
      IF .NOT. oPrinter:create()
         Alert( "Cannot create device context" )
         QUIT
      ENDIF

      // Create print job
      IF .NOT. oPrinter:startDoc( "xHarbour test page" )
         Alert( "Cannot create document" )
         QUIT
      ENDIF

      // Text in fixed font
      oPrinter:textOut( "Text in default font" )
      oPrinter:bold( FW_EXTRABOLD )
      oPrinter:textOut( oPrinter:fontName )
      oPrinter:bold( FW_NORMAL )
      oPrinter:newLine()

      aFonts := oPrinter:getFonts()
      nFont  := AScan( aFonts, ;
                       {|a| "ARIAL" $ Upper(a[1]) } )

      cFont  := aFonts[nFont,1]

      // Text in proportional font
      oPrinter:setFont( cFont )
      oPrinter:textOut( "Text in Arial font" )
      oPrinter:bold( FW_EXTRABOLD )
      oPrinter:textOut( oPrinter:fontName )
      oPrinter:bold( FW_NORMAL )
      oPrinter:newLine()

      // Colored text
      oPrinter:setColor( RGB_YELLOW, RGB_BLUE )
      oPrinter:textOut( "Yellow on Blue" )
      oPrinter:newLine()

      // Draw colored line across page
      oPrinter:setPen( PS_DASH, 5, RGB_GREEN )
      oPrinter:line( oPrinter:posX, ;
                     oPrinter:posY, ;
                     oPrinter:rightMargin, ;
                     oPrinter:posY  )

      // Send output to printer
      oPrinter:endDoc()

      // Release GDI device context
      oPrinter:destroy()
   RETURN

   FUNCTION RGB( nRed, nGreen, nBlue )
   RETURN ( nRed + ( nGreen * 256 ) + ( nBlue * 65536 ) )



--------------------------------------------------------------------------------

Copyright © 2006-2007 xHarbour.com Inc. All rights reserved.
https://www.xHarbour.com