Introdução
Que tal utilizar um loading personalizado no Protheus? Como todos sabemos o Protheus possui um padrão a ser utilizado na sua interface gráfica, mas podemos utilizar algumas técnicas para mudar um pouco essa interface e deixa-la um pouco mais com a nossa cara.
Nesse artigo vamos mostrar que é possível inclusive personalizar uma tela de loading utilizando efeitos que costumamos ver em páginas da internet.
Recursos
- Semelhante a função FwMsgRun()
- Possui 8 modelos de processamento além de permitir um SVG customizado.
- Permite formatar em HTML a mensagem de processamento.
- Permite reposicionar o Load.
Bora Codar!!
User Function LbMsgRun( bAction, cTitle, cText, nStyle, nPosLeft, cSvgCustom)
Local oDialog := Nil
Local oSVG := Nil
Local oSay := Nil
Local nLargDlg := 0
Local nAltDlg := 0
Local cSvgAnimado := ""
PARAMTYPE 0 VAR bAction AS BLOCK DEFAULT { || Sleep(5000) }
PARAMTYPE 1 VAR cTitle AS CHARACTER OPTIONAL DEFAULT "LbMsgRun"
PARAMTYPE 2 VAR cText AS CHARACTER OPTIONAL DEFAULT '<span style="color: #003366; size=15">Processando, aguarde...</span>'
PARAMTYPE 3 VAR nStyle AS NUMERIC OPTIONAL DEFAULT 1
PARAMTYPE 4 VAR nPosLeft AS NUMERIC OPTIONAL DEFAULT 0
PARAMTYPE 5 VAR cSvgCustom AS CHARACTER OPTIONAL DEFAULT ""
nLargDlg := 500
nAltDlg := 200
//---------------------------- +
// cria Janela de carregamento |
//---------------------------- +
oDialog := FWStyledDialog():New(0,0,nAltDlg,nLargDlg,cTitle,{||})
// Ajusta a altura da dialog
oDialog:nHeight := oDialog:nHeight - ( oDialog:nClientHeight - nAltDlg )
//-- Se Carrega SVG do usuario ou nao
If Empty( cSvgCustom )
cSvgAnimado := GetSvgLoad( nStyle )
Else
cSvgAnimado := cSvgCustom
EndIf
//-- Definição do objeto SVG
oSVG := TSVG():New(35,0,oDialog,200,200,cSvgAnimado,/*lStretch*/ )
//-- Esconde a borda do objeto SVG que é adicionado por default
oSVG:SetCSS("QWidget{border: none; background: transparent;}")
//-- Centralizado
If ( nPosLeft == 0 )
nPosLeft := 40
nPosLeft := ( nLargDlg / 2 ) - nPosLeft
Else
nPosLeft := ( nPosLeft / 2 )
Endif
//-- Ajuste do posicionamento do SVG
oSVG:nLeft := nPosLeft
// Texto que sera apresentado e atualizado no processamento
@ 018, 005 SAY oSay PROMPT cText SIZE nLargDlg / 2, 007 OF oDialog HTML CENTERED PIXEL
oDialog:Activate(,,,.T.,,, {|| Eval(bAction, oSay), oDialog:End() } )
Return()
Acima temos a função principal responsável por receber as requisições e apresentar a tela de loading conforme os parâmetros informados na chamada.
Repare que a função é bem personalizável recebendo como parâmetros:
- bAction => O bloco de código ou função que será executada em background do loading.
- cTitle => O título da janela de loading.
- cText => Um texto informando ao usuário o que está acontecendo nesse momento.
- nStyle => O modelo de processamento a ser utilizado (a imagem com efeito).
- nPosLeft => Posição que ficará o efeito.
- cSvgCustom => Caso queira usar um SVG customizado.
o bloco de código ou função que será executada em background do loading, o título da janela, um texto informando ao usuário o que está ocorrendo
Excelente janela de processamento para utilizar no Protheus e encantar os usuários, irei usar em meus projetos com certeza!!
Fonte completo com exemplos está disponível no GITHUB.
Créditos
Gostaria de agradecer ao grande programador Lucas Brustolin que fez essa obra de arte e compartilhou com toda a comunidade. Espero que essa atitude sirva de estímulo para que mais devs queiram compartilhar os seus conhecimentos.
Conheçam melhor o Lucas:
- GitHub: https://github.com/lucasbrustolin
- E-Mail: lucasbrustolin@hotmail.com
- Site: http://lucasbrustolin.epizy.com/?i=2#top

Desenvolvedor e entusiasta de inovações e tecnologia.