Hoje vamos aprender a usadr a Função FWMsgRun do AdvPL [Tlpp], [tl++] Cria uma tela de processamento que fica com um círculo girando. – Curso Protheus grátis AdvPL / TLPP.
Sintaxe: FWMsgRun(, [oComponent] , , [cHeader], [cText] ) -> Nil
Parâmetros:
| Nome | Tipo | Descrição | Default | Obrigatório | Referência | 
|---|---|---|---|---|---|
| oComponent | Object | Componente que será sobreposto com o painel | |||
| bAction | Code-block | Bloco de código a ser executado (o Bloco de código recebera o objeto TSay para atualizações) | X | ||
| cHeader | String | Texto do Header | “” | ||
| cText | String | Texto do Corpo | “” | 
Exemplos de Uso:
- FWMsgRun(, {|oSay| mMinhaRot(oSay) }, “Processando”, “Processando a rotina…”)
 - FwMsgRun(Nil,{|| MSExecAuto({|x,y,z| MATA410(x,y,z)},aCabec,aItens,3)},Nil,”Gerando o pedido de venda…”)
 - FWMsgRun(oPanel1, {|oSay| ExecTest(oSay) }, “Processando”, “Processando a rotina…”
 
#Include "Protheus.ch"
/*----------------------------------------------------------------------------------*
	{Protheus.doc} User Function mFWMsgRun()
	@type:      User Function
	@author:    Jose Moura
	@site:      https://academiaproerp.com
	@canal:     [Inscreva-se no canal https://www.youtube.com/@academiaprotheus]
	@desc.:     Função FWMsgRun. Cria uma tela de processamento com círculo girando
	@Sintaxe:   FWMsgRun(, [oComponent] , <bAction>, [cHeader], [cText] ) -> Nil
*-----------------------------------------------------------------------------------*/
User Function mFWMsgRun()
    Local aArea := GetArea()
     
    FWMsgRun(, {|oSay| mMinhaRot(oSay) }, "Processando", "Processando dados Municipios CC2")
     
    RestArea(aArea)
Return
 
Static Function mMinhaRot(oSay)
    Local nRegAtu := 0
    Local nRegTot := 0
     
    oSay:SetText("Iniciando processamento...")
     
    //Contando o total de registros da tabela de Municipios
    DbSelectArea("CC2")
    CC2->(DbGoTop())
    Count To nRegTot
     
    //Enquanto houver dados na CC2, mostra a mensagem de processamento
	CC2->(DbGoTop())
    While !CC2->(EoF())
        nRegAtu++
        oSay:SetText("Analisando registro " + cValToChar(nRegAtu) + " de " + cValToChar(nRegTot) + "...")
        ProcessMessage() //FORÇA O DESCONGELAMENTO DO SMARTCLIENT
		CC2->(DbSkip())
    EndDo
Return



Analista de sistemas, programador com mais de 18 anos de experiência no sistema Totvs Protheus, administrador, suporte e customizações, idealizador da Academia ProERP, já ajudou centenas de pessoas a programar em AdvPL/Tlpp.