Página 1 de 1

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Enviado: 28 Out 2013 12:27
por Jairo Maia
Olá Pessoal,

Estou apanhando para imprimir uma simples linha horizontal. E apanhando mesmo, e não sei como fazer, alguém pode me dar uma dica? Se tento assim, imprime sempre na vertical:

Código: Selecionar todos

oPrinter:NewLine()
oPrinter:Line( oPrinter:PosX, oPrinter:LeftMargin, oPrinter:PosX, oPrinter:RightMargin )
Também já fiz várias inversões e tenho sempre o mesmo resultado.

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Enviado: 28 Out 2013 16:29
por Toledo
Olá Jairo, veja este exemplo:

Código: Selecionar todos

#include "hbwin.ch"

PROCEDURE Main()
   LOCAL nPrn := 1
   LOCAL aPrn := WIN_PRINTERLIST()
   CLS
   IF Empty( aPrn )
      Alert("Nenhuma impressora instalada")
      QUIT
   ENDIF
   DO WHILE nPrn != 0
      CLS
      @ 2, 0 TO MaxRow(), MaxCol()
      nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )
      IF nPrn != 0
         PrnTest( aPrn[ nPrn ])
      ENDIF
   ENDDO
RETURN

STATIC PROCEDURE PrnTest( cPrinter )
   LOCAL oPrinter := Win_Prn():New( cPrinter )
   oPrinter:Landscape := .F.
   oPrinter:FormType  := WIN_DMPAPER_A4
   oPrinter:Copies    := 1
   IF ! oPrinter:Create()
      Alert( "Nao pode criar oPrinter" )
   ELSE
      IF ! oPrinter:startDoc( "Imprimindo Linhas" )
         Alert( "StartDoc() falhou" )
      ELSE
         oPrinter:SetPen( WIN_PS_SOLID, 1 )  //tipo de linha
         oPrinter:LineHeight:=150            //espaço entre linhas
         For i=1 to 30
          oPrinter:TextOut("Linha "+alltrim(str(i)))
          oPrinter:Line( oPrinter:LeftMargin, oPrinter:PosY + 5, oPrinter:RightMargin, oPrinter:PosY + 5 )
          oPrinter:NewLine()
         Next
         oPrinter:EndDoc()
      ENDIF
      oPrinter:Destroy()
   ENDIF
RETURN
Abraços,

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Enviado: 28 Out 2013 16:34
por Eolo
Horizontal
oprinter:line(esquerda,altura,direita,altura)
Imprime os pixels sempre na mesma altura, começando em esquerda e terminando em direita.

Vertical
oprinter:line(posicao,topo,posicao,base)
Imprime os pixels sempre na mesma posicão (centro da folha ou o que for), começando em topo e indo até base.

A WinPRN imprime em pixels, então as coordenadas em pixels mudam dependendo do tamanho do papel e da resolução da impressão.
Dá uma olhada neste t'pico: https://pctoledo.org/forum/viewto ... tas#p74185

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Enviado: 30 Out 2013 08:39
por Jairo Maia
Obrigado Toledo e Obrigado Eolo,

O objetivo foi montar a impressão de um carne de parcelamento. Depois das dicas consegui entender como funciona o movimento nos eixos X e Y. Obrigado a todos.