Como Imprimir uma Linha Horizontal com a Win_Prn()?

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

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Mensagem 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
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Como Imprimir uma Linha Horizontal com a Win_Prn()?

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder