Função Útil para impressão

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

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

Função Útil para impressão

Mensagem por asimoes »

Código: Selecionar todos

SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO "ARQREL.TXT"
SET PRINT ON
PrintLine(.T., 0   , "COLUNA1" )
PrintLine(.F., 9   , "COLUNA2" )
PrintLine(.F., 18   , "COLUNA3" )
SET PRINT OFF
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON

Código: Selecionar todos

FUNCTION PrintLine(lNewLine, nEspaco, cTexto)
LOCAL nSpc
STATIC nLenLinha

   hb_Default(@lNewLine, .F.)
   hb_Default(@nEspaco, 0)
   hb_Default(@cTexto, "")
   
   If lNewLine
      ? Space(nEspaco) + cTexto
      nLenLinha := Len ( Space(nEspaco) + cTexto )
   Else
      nSpc := nEspaco-nLenLinha
      If nSpc >= 0
         ?? Space(nSpc) + cTexto 
      Else
         ?? Space(nEspaco) + cTexto 
      Endif
      nLenLinha := Len ( Space(nEspaco) + cTexto ) 
   Endif
   
RETURN Nil
►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

Função Útil para impressão

Mensagem por asimoes »

Outro exemplo:

Código: Selecionar todos

PrintLine(.T., 0, NegritoImpPCL(.T.) )
PrintLine(.F., 1, 'CONTA' )
PrintLine(.F., 0, NegritoImpPCL(.F.) )

FUNCTION NegritoImpPCL(lNegrito)
* Para negritar
RETURN IF(lNegrito, Chr(27)+'(s3B', Chr(27)+'(s-3B')
►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

Função Útil para impressão

Mensagem por asimoes »

O ponto forte da função é o uso de ?? ou QQout onde não se quer quebra linha

?? "No carriage return / linefeed for this expression!"
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função Útil para impressão

Mensagem por JoséQuintas »

Não entendi muito bem, o equivalente ao primeiro exemplo seria isto?

Código: Selecionar todos

SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO "ARQREL.TXT"
SET PRINT ON

?? "COLUNA1"
?? Space(9) + "COLUNA2"
?? Space(18) + "COLUNA3"
?

SET PRINT OFF
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função Útil para impressão

Mensagem por JoséQuintas »

Só lembrando uma coisa que confunde:

Código: Selecionar todos

? texto
O resultado disso não é TEXTO<ENTER> e sim <ENTER>TEXTO
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

Função Útil para impressão

Mensagem por asimoes »

Quintas,

Imagina que a minha função é um:

nLinha:=1
nColuna:=0
@nlinha,ncoluna SAY "teste"
nColuna +=20
@nlinha,nColuna SAY "teste"

Tenta fazer a impressão sem quebra de linha usando ?? para uma determinada posição na linha, tipo:

Linha 1 coluna 0 e depois na mesma linha coluna 20 escreve outra coisa.

Código: Selecionar todos

teste               teste
Transforma isso em uma função.

Outra coisa eu uso em alguns relatórios instrução PCL para negritar o texto.
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função Útil para impressão

Mensagem por JoséQuintas »

Se for no estilo do arquivo Ascii, com colunas fixas:

Código: Selecionar todos

?? Pad( "texto", 20 )
?? Pad( "texto2", 20 )
?? Pad( "texto3", 20 )
?
Mas isso tudo o Harbour já não faz? entendi menos ainda.
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

Função Útil para impressão

Mensagem por asimoes »

As colunas não são fixas e podem estar em posições distintas.
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função Útil para impressão

Mensagem por JoséQuintas »

Pode ser que eu não esteja entendendo alguma coisa, mas não seria o que isto faz?

Código: Selecionar todos

SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO "ARQREL.TXT"
DO WHILE ! Eof()
   @ Row(), 0 SAY "COLUNA1"
   @ Row(), 9 SAY "COLUNA2"
   @ Row(), 18 SAY "COLUNA3"
   @ Row() + 1, 0 SAY ""
   SKIP
ENDDO
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON
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/
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Função Útil para impressão

Mensagem por wmanesco »

Pelo que entendi também é o mesmo resultado do Row(), igual seu exemplo Quintas
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Função Útil para impressão

Mensagem por asimoes »

O que eu quero é informar a linha e coluna onde será impresso o texto, só que nesta linha o texto tem que ficar em destaque (negrito) usando a função
NegritoImpPCL(.T.) e no final do texto desligar o negrito com NegritoImpPCL(.F.), para impressão a sequencia escape envia o comando para impressora negritar.

O texto CONTA tem que ficar na coluna 1

Código: Selecionar todos

SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO "ARQREL.TXT"
SET PRINT ON
   @ Row(), 1        SAY "CONTA"
   @ Row(), 16       SAY "NOME DA CONTA"
   @ Row(), 48       SAY "FONTE"
   @ Row() + 1, 0    SAY ""
SET PRINT OFF
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON
Com negrito:

Código: Selecionar todos

SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO "ARQREL.TXT"
SET PRINT ON
   @ Row(), 1        SAY NegritoImpPCL(.T.)+ "CONTA"
   @ Row(), 16       SAY "NOME DA CONTA"
   @ Row(), 48       SAY "FONTE" + NegritoImpPCL(.F.)
   @ Row() + 1, 0    SAY ""
SET PRINT OFF
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON
O que meu atendeu foi a função que eu fiz, alguém tem alguma sugestão melhor?
►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

Função Útil para impressão

Mensagem por asimoes »

O meu cabeçalho de impressão exemplo é esse:

Código: Selecionar todos

      PrintLine(.T., 000, NegritoImpPCL(.T.) )
      PrintLine(.F., 001, 'CONTA' )
      PrintLine(.F., 016, 'NOME DA CONTA' )
      PrintLine(.F., 048, 'FONTE' )
      PrintLine(.F., 054, 'AGÊNCIA' )
      PrintLine(.F., 062, 'F.FIN.' )
      PrintLine(.F., 068, 'FT.CONTRAP.' )
      PrintLine(.F., 080, 'ORG.U.' )
      PrintLine(.F., 087, 'APLIC' )
      PrintLine(.F., 093, 'BSD' )
      PrintLine(.F., 097, 'DT.ABERTU.' )
      PrintLine(.F., 108, 'DT.ENCERR.' )
      PrintLine(.F., 119, 'CONTRATO/CONVÊNIO' )
      PrintLine(.F., 140, 'OFÍCIO SOLICITANTE' )
      PrintLine(.F., 166, 'OBJETO' )
      PrintLine(.F., 212, 'CATEGORIA' )
      PrintLine(.F., 000, NegritoImpPCL(.F.) )
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função Útil para impressão

Mensagem por JoséQuintas »

Só corrigindo o que postei:
Não é ROW(), e sim PROW()

Sugestão para o seu caso, mas precisa testar:

Código: Selecionar todos

FUNCTION Negrito()

nRow := pRow()
nCol := pCol()
@ pRow(), pCol() SAY "dfgdkfjhkgfhdjk"
SetPrc( nRow, nCol )
RETURN NIL
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

Função Útil para impressão

Mensagem por asimoes »

Quintas,

Não funcionou, porque tem a sequencia escape pcl para negritar e este espaço usado tem que ser considerado
E na função tem que informar as posições na linha onde cada texto vai ser impresso

Exemplificando no arquivo que vai ser impresso tem que ficar assim:
Esta linha tem 220 bytes

Esta figura foi produzida pela função que eu fiz no início do post
Screen Shot 11-22-16 at 08.06 AM.PNG
Screen Shot 11-22-16 at 08.06 AM.PNG (5.97 KiB) Exibido 2143 vezes
►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

Função Útil para impressão

Mensagem por asimoes »

Antes de criar a função eu estava fazendo assim:

Código: Selecionar todos

      QOut( NegritoImpPCL(.T.) )
      QQOut( " CONTA          NOME DA CONTA                   FONTE AGENCIA F.FIN.FT.CONTRAP. ORG.U. APLIC BSD DT.ABERTU. DT.ENCERR. CONTRATO/CONVENIO    OFICIO SOLICITANTE        OBJETO                                        CATEGORIA" )
      QQOut( NegritoImpPCL(.F.) )


FUNCTION NegritoImpPCL(lNegrito)
* Para negritar
RETURN IF(lNegrito, Chr(27)+'(s3B', Chr(27)+'(s-3B')
Mas eu queria aproveitar o que já estava definido com @linha,coluna say ""

Então fiz a função:

PrintLine(.T., 000, NegritoImpPCL(.T.) )
PrintLine(.F., 001, 'CONTA' )
PrintLine(.F., 016, 'NOME DA CONTA' )
PrintLine(.F., 048, 'FONTE' )
PrintLine(.F., 054, 'AGENCIA' )
PrintLine(.F., 062, 'F.FIN.' )
PrintLine(.F., 068, 'FT.CONTRAP.' )
PrintLine(.F., 080, 'ORG.U.' )
PrintLine(.F., 087, 'APLIC' )
PrintLine(.F., 093, 'BSD' )
PrintLine(.F., 097, 'DT.ABERTU.' )
PrintLine(.F., 108, 'DT.ENCERR.' )
PrintLine(.F., 119, 'CONTRATO/CONVENIO' )
PrintLine(.F., 140, 'OFICIO SOLICITANTE' )
PrintLine(.F., 166, 'OBJETO' )
PrintLine(.F., 212, 'CATEGORIA' )
PrintLine(.F., 000, NegritoImpPCL(.F.) )

Que resulta o mesmo efeito do QOut e QQout só que eu posso informar onde cada texto vai ser impresso.
É só analisar a função PrintLine para entender o eu quero fazer.
►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)
Responder