imprimir relatorio passando tipoImpressao como parametro

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

imprimir relatorio passando tipoImpressao como parametro

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

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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.
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)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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 )
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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] )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

imprimir relatorio passando tipoImpressao como parametro

Mensagem por asimoes »

Porter,

Fiz um teste aqui e funcionou assim:

tipoImpressao = ' "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. '
oPrinter:SetFont( ( tipoImpressao ))
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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()

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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
//---------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

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

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

imprimir relatorio passando tipoImpressao como parametro

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Responder