MsNewProcess

Régua dupla de processamento, para manipular pode ser usado os métodos SetRegua1(), IncRegua1(), SetRegua2() e IncRegua2()

Exemplo da Rotina:

oProcess := MsNewProcess():New({|| fSuaFuncao(oProcess)}, "Título...", "Mensagem...", .T.)
oProcess:Activate()

Exemplo 1- Mostrando a barra de processamento:

//Bibliotecas
#Include "Protheus.ch"
#Include "TopConn.ch"
  
/*/{Protheus.doc} zTstBar
Função de exemplo de barras de processamento em AdvPL
@author Atilio
@since 28/10/2018
@version 1.0
@type function
@example u_zTstBar()
/*/
  
User Function zTstBar()
    Local aArea      := GetArea()
    Local lContinua  := .T.
    Local nTipoRegua := 0
    Local oProcess
    Private cQryAux  := ""
      
    //Monta a consulta de grupo de produtos
    cQryAux := " SELECT "                          + CRLF
    cQryAux += "     BM_GRUPO, "                    + CRLF
    cQryAux += "     BM_DESC "                      + CRLF
    cQryAux += " FROM "                            + CRLF
    cQryAux += "     SBM010 SBM "                   + CRLF
    cQryAux += " WHERE "                           + CRLF
    cQryAux += "     BM_FILIAL = ' ' "              + CRLF
    cQryAux += "     AND SBM.D_E_L_E_T_ = ' ' "     + CRLF
      
	oProcess := MsNewProcess():New({|| fExemplo2(oProcess)}, "Processando...", "Aguarde...", .T.)
	oProcess:Activate()
      
    RestArea(aArea)
Return
  
/*-----------------------------------------------------------*
 | Func.: fExemplo2                                          |
 | Desc.: Exemplo utilizando MsNewProcess                    |
 *-----------------------------------------------------------*/
  
Static Function fExemplo2(oObj)
    Local aArea  := GetArea()
    Local nAtual := 0
    Local nTotal := 0
    Local nAtu2  := 0
    Local nTot2  := 90
      
    //Executa a consulta
    TCQuery cQryAux New Alias "QRY_AUX"
      
    //Conta quantos registros existem, e seta no tamanho da régua
    Count To nTotal
    oObj:SetRegua1(nTotal)
      
    //Percorre todos os registros da query
    QRY_AUX->(DbGoTop())
    While ! QRY_AUX->(EoF())
          
        //Incrementa a mensagem na régua
        nAtual++
        oObj:IncRegua1("Analisando registro " + cValToChar(nAtual) + " de " + cValToChar(nTotal) + "...")
          
        //Incrementando a régua 2
        oObj:SetRegua2(nTot2)
        For nAtu2 := 1 To nTot2
            oObj:IncRegua2("Posição " + cValToChar(nAtu2) + " de " + cValToChar(nTot2) + "...")
        Next
          
        QRY_AUX->(DbSkip())
    EndDo
    QRY_AUX->(DbCloseArea())
      
    RestArea(aArea)
Return

Observações:

  • Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
  • Se tiver sugestões de rotinas, pode entrar em contato;