Dei uma melhorada na função.
Execute assim para permitir que o usuário abandone a função caso não houver retorno do arquivo:
MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .T., {||File( cFile )} )
Se o usuário não puder cancelar e deve esperar até o arquivo aparecer na pasta, então faça assim:
MsgWait1( "Aguarde o retorno do arquvo"+cFile, "Aguarde o retorno", 30, .F., {||File( cFile )} )
A diferença está no quarto parâmetro .T. ou .F.
O legal dessa função é que mostra para o usuário que o sistema não está travado. É o que eu queria fazer com o MSGRUN()
Confira.
*******************************************************************************************
Function MsgWait1( cCaption, cTitle, nSeconds, lBot, bAction ) // MsgWait com "botão" de sair e "função" -> Exemplo: MsgWait1("cCaption", "cTitle", 5, .T., {||File("xxx.txt")} ) // o code block deve retornar (.T.)
*******************************************************************************************
LOCAL oDlg, oProg1, oSay, oBtn, bOk, nInicio:=0
cCaption := iif(ValType(cCaption)#"C", "Por favor, aguarde...", cCaption) // Mensagem para a janela
cTitle := iif(ValType(cTitle )#"C", "(OASyS) Mensagem com espera programada.", cTitle ) // Título para a janela
nSeconds := iif(ValType(nSeconds)#"N", 5, nSeconds) // Quantos segundos a janela ficará aberta
lBot := iif(ValType(lBot )#"L", .F., lBot ) // O Botão de Fechar será liberado? Se informado um Code Block será será oculto.
bAction := iif(ValType(bAction )#"B", "", bAction ) // Code Block a ser executado. Exemplos: {|| Funcao() } ou {|| File("ent.txt") } // A ação deve sempre retornar (.T.) no fim da execução
PRIVATE n := 0
PRIVATE lBtn := .F.
PRIVATE lAction := ValType(bAction)="B"
PRIVATE lRet := iif(lAction, .F., .T.)
DEFINE DIALOG oDlg SIZE 400,300 COLOR CLR_BLUE,CLR_HGRAY FONT oFontGet TITLE cTitle STYLE DS_MODALFRAME PIXEL
@ 001,001 GROUP TO 109,199 FONT oFontSay TRANSPARENT PIXEL
@ 110,001 GROUP TO 138,199 FONT oFontSay TRANSPARENT PIXEL
@ 120,008 METER oProg1 VAR nInicio TOTAL nSeconds NOPERCENTAGE SIZE 145,011 PIXEL
@ 120,159 BUTTON oBtn PROMPT "&Fechar" SIZE 35,12.5 ACTION lBtn:=.T. WHEN lBot PIXEL CANCEL
@ 010,008 SAY oSay PROMPT cCaption SIZE 189,092 COLOR CLR_RED,CLR_HGRAY PIXEL
oBtn:cToolTip:="Atenção: Se você fechar essa tela eu não vou conseguir executar a tarefa e algo pode sair errado."
ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:bStart:={|| Increase(oDlg, oProg1, nSeconds, bAction) }
Return( lRet )
Static Function Increase(oDlg, oProg1, nSeconds, bAction)
oDlg:Refresh()
oProg1:Set(0)
oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos."
SysRefresh()
For n=0 To nSeconds
oProg1:Set( n )
oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds - n))+" segundos."
if lAction // Se houver um code block a ser executado:
if Eval( bAction ) // - Verifica se a tarefa foi executada.
lRet := .T.
Exit
elseif lBtn .OR. n=nSeconds // - Recomeça a contagem caso não tenha executado a tarefa ainda..
if lBtn .AND. !MsgYesNo("Eu ainda não consegui terminar a tarefa que fui programado para executar, devo continuar até a conclusão?","(OASyS) Estou tentando executar uma tarefa importante.")
Exit
endif
lBtn := .F.
n := 0
oProg1:Set( n )
oProg1:cText := "Essa tela fechará em "+Alltrim(Str(nSeconds))+" segundos."
endif
endif
if lBtn
Exit
endif
WaitSeconds( 1 )
SysRefresh()
Next
oDlg:End()
Return nil