Página 1 de 1

imprimir relatorio passando tipoImpressao como parametro

Enviado: 11 Jan 2016 15:40
por porter
ola pessoal, o comando abaixo imprime corretamente.

Código: Selecionar todos

oPrinter:SetFont( "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. )
Agora, estou tentando imprimir passando esse tipo de impressão como parâmetro, estou fazendo dessa forma mas não esta surtindo efeito:

Código: Selecionar todos

tipoImpressao =  ' "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. '
oPrinter:SetFont( tipoImpressao )
Eu quero passar o tipo de impressão como parâmetro, porque dependendo do lugar o mesmo relatório tem que ser comprimido e dependendo o lugar o mesmo relatório tem que ser caracteres normais, então por isso vou cadastrar o tipo de impressão e passa-lo como parâmetro, tem como ?

xHarbour.

imprimir relatorio passando tipoImpressao como parametro

Enviado: 11 Jan 2016 17:02
por Jairo Maia
Olá Porter,

Nunca usei dessa forma, mas vou dar um palpite: Tente passar como macro, veja se funciona:

Código: Selecionar todos

tipoImpressao :=  ' "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. '
oPrinter:SetFont( &tipoImpressao. )
Nota: Para passar como Macro a variável tipoImpressao não pode ser Local. Se for, para testar mude para Private.

imprimir relatorio passando tipoImpressao como parametro

Enviado: 11 Jan 2016 17:32
por porter
esta compilando, mas da erro de sintaxe na execução, tentei assim:

Código: Selecionar todos

Private tipoImpressao :=  ' "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. '
oPrinter:SetFont( &tipoImpressao. )
tentei tambem sem o ponto(.)

Código: Selecionar todos

Private tipoImpressao :=  ' "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. '
oPrinter:SetFont( &tipoImpressao )

imprimir relatorio passando tipoImpressao como parametro

Enviado: 11 Jan 2016 19:19
por JoséQuintas
Isso não é um valor, é uma lista de valores.

Código: Selecionar todos

oFont := { "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F.  }
...
oPrinter:SetFont( oFont[1], oFont[2], oFont[3], oFont[4],oFont[5],oFont[6] )

imprimir relatorio passando tipoImpressao como parametro

Enviado: 11 Jan 2016 22:18
por asimoes
Porter,

Fiz um teste aqui e funcionou assim:

tipoImpressao = ' "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. '
oPrinter:SetFont( ( tipoImpressao ))

imprimir relatorio passando tipoImpressao como parametro

Enviado: 11 Jan 2016 22:24
por asimoes
Porter,

Você tem que ver o que esá fazendo, fiz um teste usando macro e funcionou veja:

Código: Selecionar todos

  oPrn := win_prn():New(WIN_PrinterGetDefault())
  oPrn :LandScape  := .F.
  oPrn :FormType   := WIN_DMPAPER_A4//LETTER//A4
  oPrn :Copies     :=  1
  //oPrn:AskProperties := .T.
   
  if !oPrn:Create()
     hwg_MsgStop("Não foi criado documento.","Erro")
     Return Nil
  EndIf
  
  if !oPrn:StartDoc("teste")
     hwg_MsgStop("Erro na Impressora.","Erro")
     Return Nil
  EndIf

  oPrn:SetColor( HB_WIN_RGB_BLACK )

  tipoImpressao :=  '"Lucida Console", 8, { 3, -51 }'
  oPrn:SetFont( &tipoImpressao. )
  
  __nColFixed:= 3 * oPrn:CharWidth
  
  oPrn:SetPrc(2, 0)
  
  oPrn:SetPos( __nColFixed )
  
  oPrn:Textout( "TESTE", .T. )
  
  oPrn:EndDoc()


imprimir relatorio passando tipoImpressao como parametro

Enviado: 11 Jan 2016 22:35
por asimoes
Porter,

Dessa forma que eu te passei pode até não dar erro, mas a fonte não vai configurar.
oPrinter:SetFont( ( tipoImpressao ))

Veja o meu post anterior.

imprimir relatorio passando tipoImpressao como parametro

Enviado: 12 Jan 2016 13:41
por porter
Nesse exemplo que Jose Quintas passou, onde está "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. eu quero passar um parametro seria uma variavel no lugar desse comando contendo esse comando, obrigado.


oFont := { "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. }
...
oPrinter:SetFont( oFont[1], oFont[2], oFont[3], oFont[4],oFont[5],oFont[6] )

xHarbour

imprimir relatorio passando tipoImpressao como parametro

Enviado: 12 Jan 2016 14:37
por alxsts
Olá!

Código: Selecionar todos

FUNCTION Main()

   //
   // comandos...
   //

   Imprimir( { "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. } )

RETURN NIL

//---------------------------------------------------------------

FUNCTION Imprimir( aFontCfg )

   LOCAL oPrinter

   //
   // comandos...
   //

   oPrinter:SetFont( aFontCfg[1], aFontCfg[2], aFontCfg[3], aFontCfg[4], aFontCfg[5], aFontCfg[6] )

   //
   // comandos...
   //

RETURN NIL
//---------------------------------------------------------------

imprimir relatorio passando tipoImpressao como parametro

Enviado: 12 Jan 2016 16:12
por JoséQuintas
Pequena correção:

Isso não é um comando, é um array.
array é uma variável que contém uma lista de valores

Não sei se está na dúvida de como usar uma variável dentro da lista:

Código: Selecionar todos

cNomeFonte := "Lucida Console"
oFont := { cNomeFonte, 10,{3,-60},FW_BOLD,.F.,.F. }
Sendo uma lista, dá pra pegar qualquer dos valores, ou passar a variável com a lista inteira pra função.

Código: Selecionar todos

? "nome do fonte " + oFont[ 1 ]
Imprime( oFont )
Ou sem criar o Font, direto como no exemplo do post anterior, só incluindo na lista a variável com o nome do fonte

imprimir relatorio passando tipoImpressao como parametro

Enviado: 12 Jan 2016 17:30
por Jairo Maia
Olá Pessoal,

Em Harbour, apesar de ter sido mero palpite (pois nunca usei assim), da forma que foi colocado neste post e confirmado neste post do Alexandre, isso funciona:

Código: Selecionar todos

tipoImpressao :=  '"Lucida Console", 8, { 3, -51 }'
oPrn:SetFont( &tipoImpressao. )
Apenas a diferença é que o autor do tópico usa xHarbour. Começo a notar diferenças significativas, embora saiba que Harbour não tem obrigação de manter compatibilidade com xHarbour.

imprimir relatorio passando tipoImpressao como parametro

Enviado: 12 Jan 2016 18:09
por JoséQuintas
Essa é nova pra mim.

Código: Selecionar todos

PROCEDURE Main
   LOCAL oVar
   oVar := '"Lucida",5,5'
   Teste( &oVar )
   RETURN


FUNCTION teste( x, b, c )
   LOCAL oElement
   ? ValType( x )
   ? ValType( b )
   ? ValType( c )
   ? Len( x )
   FOR EACH oElement IN x
      ? oElement
   NEXT
   ? b
   ? c
   RETURN NIL
Resultado

Código: Selecionar todos

d:\temp>test

C
N
N
         6
L
u
c
i
d
a
         5
         5
d:\temp>
Aceitou macro encima de lista.
Harbour 3.4

imprimir relatorio passando tipoImpressao como parametro

Enviado: 12 Jan 2016 18:59
por alxsts
Olá!

No site do Alexander Kresin tem explicações sobre a expansão das possibilidades de utilização de macros e code-blocks. As melhorias sobre code-block, que é um tipo de dado, podem ser acrescentadas ao tópico Tutorial de codeblock, se assim o desejar o autor do mesmo.

Nunca gostei de macros pois seu uso aumenta o tamanho do executável e o torna mais lento, pelo menos nos tempos de Clipper. Mas, as melhorias de code-block em Harbour ficaram muito bacanas, como mostrado abaixo:

Código: Selecionar todos

Function Main
 
   Local b1, b2
 
   b1 := Fnc1( Seconds() )
   ? Eval( b1 )
 
   ? "Press any key"
   inkey(0)
 
   b2 := Fnc1( Seconds() )
   ? Eval( b2 )
 
   ? "Press any key"
   inkey(0)
 
   ? Eval( b1,Seconds() )
 
   ? "Press any key"
   inkey(0)
 
   ? Eval( b1 )
   ?
 
Return Nil
 
Function Fnc1( nSec )
 
   Local bCode := {|p1|
      Local tmp := nSec
      IF p1 != Nil
         nSec := p1
      ENDIF
      Return tmp
   }
 
Return bCode
Perdoem desviar um pouco do assunto do tópico mas creio que valha a pena.