Imprimir Texto em Negrito em Antigos Fontes com SetPrint | Ti Responde 0233

No vídeo de hoje, vamos demonstrar em como imprimir um texto em negrito usando a antiga SetPrint.

A dúvida de hoje, nos perguntaram, como poderíamos imprimir algum texto em negrito, usando aqueles antigos relatórios em SetPrint.

 

Pensando nisso, montamos um exemplo, onde vai ser demonstrado em como fazer um For … Next para forçar a reimpressão do texto deixando ele em negrito.

 

Obs.: Pessoal, não é indicado a criação de novos relatórios em SetPrint, tentem usar TReport, FWMSPrinter ou SmartView, esse exemplo é para quem precisa dar manutenção em fontes legados com SetPrint.

 

Segue abaixo o vídeo exemplificando:

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} zVid0233
Função para simular em como deixar um texto negrito em um SetPrint
@type user function
@author Atilio
@since 18/09/2025
@example u_zVid0250()
@obs Esse exemplo foi baseado nesse link: https://tdn.totvs.com/pages/releaseview.action?pageId=6815081

    Tem também uma documentação da TOTVS que ensina em como deixar negrito: https://centraldeatendimento.totvs.com/hc/pt-br/articles/360018872251-Cross-Segmento-TOTVS-Backoffice-Linha-Protheus-ADVPL-Montagem-de-Drivers-de-Impress%C3%A3o
/*/

User Function zVid0233()
    Local   aArea    := FWGetArea()
    Local   wnrel
    Local   cString  := "SA1"
    Local   titulo   := "Listagem de Clientes"
    Local   NomeProg := "zVid0250"                              
    Local   Tamanho  := "M"
    Private aReturn  := {"Zebrado", 1, "Administracao", 1, 2, 1, "", 1}
    Private m_pag
    
    //Mostra a tela para o usuário confirmar
    wnrel := SetPrint(cString, NomeProg, "", @titulo, "", "", "", .F., .F., .F., Tamanho, , .F.)
    
    //Define na memória o que foi definido no SetPrint
    SetDefault(aReturn, cString)

    //Aciona a impressão do relatório
    RptStatus({|lEnd| fImprime(@lEnd, wnRel, cString, Tamanho, NomeProg, titulo)}, titulo)
    
    FWRestArea(aArea)
Return
 
Static Function fImprime(lEnd, WnRel, cString, Tamanho, NomeProg, titulo)
    Local cabec1   := ""
    Local cabec2   := ""
    Local cRodaTxt := oemtoansi("Rodapé")
    Local nCntImpr := 0
    Local aPosTxt  := {}
    Local nTotal   := 0
    Local nNegrito := 0
    Local nLinha   := 7
    Local nLimite  := 80
    
    //Monta o cabeçalho das colunas e as posições dos textos
    aAdd(aPosTxt, Len(cabec1))
    cabec1 += AvKey("Codigo", "A1_COD")   + " | "

    aAdd(aPosTxt, Len(cabec1))
    cabec1 += AvKey("Nome",   "A1_NOME")  + " | "

    aAdd(aPosTxt, Len(cabec1))
    cabec1 += AvKey("eMail",  "A1_EMAIL") + " | "

    //Abre a tabela de clientes
    DbSelectArea("SA1")
    SA1->(DbSetOrder(1)) // A1_FILIAL + A1_COD + A1_LOJA
    SA1->(DbGoTop())

    //Define o tamanho da régua
    Count To nTotal
    SetRegua(nTotal)
    SA1->(DbGoTop())

    //Imprime o cabeçalho
    Cabec(titulo, cabec1, cabec2, nomeprog, tamanho, 15)
    
    //Enquanto houver clientes
    While ! SA1->(EoF())
        //Incrementa a régua
        IncRegua()
    
        //Se passar do limite, quebra a página
        If nLinha > nLimite
            Roda(nCntImpr, cRodaTxt, Tamanho)
            Cabec(titulo, cabec1, cabec2, nomeprog, tamanho, 15)
            @ nLinha, 0 PSAY __PrtThinLine()                
        EndIf   
    
        //Incrementa as informações em memória
        nCntImpr++     
        nLinha++   
    
        //Imprime os textos
        @ nLinha, aPosTxt[1] PSay SA1->A1_COD   + " | " 
        @ nLinha, aPosTxt[2] PSay SA1->A1_NOME  + " | "
        @ nLinha, aPosTxt[3] PSay SA1->A1_EMAIL + " | "

        //Agora reimprime o eMail mais 5 vezes, pra ele ficar em negrito (incrementa 1 na coluna)
        For nNegrito := 1 To 5
            @ nLinha, aPosTxt[3] +1 PSay SA1->A1_EMAIL
        Next

        SA1->(DbSkip())
    EndDo
    
    //Se não foi até o fim da página, imprime o rodapé
    If nLinha != nLimite    
        Roda(nCntImpr, cRodaTxt, Tamanho)
    EndIf
    
    //Exibe o relatório em tela
    Set Device To Screen

    //Se for HTML, prepara para gerar o arquivo
    If aReturn[5] == 1      
        Set Printer To     
        DbCommitAll()      
        OurSpool(wnrel)
    EndIf

    //Descarrega o spool
    Ms_Flush()
Return

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação