Monta tela de processamento para múltiplas mensagens, na teoria o botão cancelar que aparece deveria funcionar a qualquer momento, mas só na função User principal. A sintaxe é simples:
MSAguarde( bAcao, cTitulo ,cMensagem,lAbortar)Parâmetros:
//onde: bAcao = Bloco de código que será executado cTitulo = Titulo da tela de processamento cMensagem = Mensagem que será exibida durante o processamento lAborta = .T. habilita o botão Cancelar, .F. desabilita o botão (opção padrão)Exemplo:
User Function Processamento() MsAguarde({|lFim| Processa(@lFim)},"Processamento","Aguarde a finalização do processamento...") Return Static Function Processa(lFim) For i := 1 to 1000 If lFim MsgInfo("Cancelado!","Fim") Exit Endif MsProcTxt("Lendo "+Alltrim(str(i))) Next ReturnLembrando que não é obrigatório informar o titulo, a mensagem e o parametro para habilitar o cancelamento Particulamente, prefiro usar o Processa() e o MsNewProcess(), mostrar a barra de progresso dá a impressão que a rotina está realmente sendo executada. Espero que tenha sido útil a dica...