Tempo aproximado para leitura: 00:03:00 min
Ocorrência
Na documentação da função FwMsgRun() consta a seguinte afirmativa: "permite atualizar o texto em tempo de execução", todavia ao utilizar as propriedades cTitle, cCaption ou o método SetText(), a caixa de diálogo não está sendo atualizada.
Ambiente
Cross Segmentos - Backoffice (Linha Protheus) – ADVPL – A partir da versão 11.80
Causa
A não atualização ocorre pelo congelamento do SmartClient durante a execução de um processo longo.
Solução
Utilizar a função ProcessMessages().
Fonte
// BIBLIOTECAS NECESSÁRIAS
#Include "TOTVS.ch"
// FUNÇÃO PRINCIPAL
User function T151FWMSG()
Local oSay := NIL // CAIXA DE DIÁLOGO GERADA
// GERA A TELA DE PROCESSAMENTO
FwMsgRun(NIL, {|oSay| RunMessage(oSay)}, "Processing", "Starting process...")
Return (NIL)
// FUNÇÃO PARA ALTERAÇÃO DA MENSAGEM
Static Function RunMessage(oSay)
Local nX := 0 // CONTROLE CONTADOR DO LAÇO
// SIMULA A PREPARAÇÃO PARA EXECUÇÃO
Sleep(2000)
// LAÇO COM PAUSA DE UM SEGUNDO PARA SIMULAÇÃO
For nX := 1 To 10
oSay:SetText("Working at: " + StrZero(nX, 6)) // ALTERA O TEXTO CORRETO
ProcessMessages() // FORÇA O DESCONGELAMENTO DO SMARTCLIENT
Sleep(1000) // SIMULA O PROCESSAMENTO DA FUNÇÃO
Next nX
Return (NIL)
Saiba mais
FWMsgRun
ProcessMessage
4 Comentários