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

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:

  1. bAction => O bloco de código ou função que será executada em background do loading.
  2. cTitle => O título da janela de loading.
  3. cText => Um texto informando ao usuário o que está acontecendo nesse momento.
  4. nStyle => O modelo de processamento a ser utilizado (a imagem com efeito).
  5. nPosLeft => Posição que ficará o efeito.
  6. 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:

Facebook Comments Box