Gracias Mario
Incluso creó una función con un temporizador, que se llama antes de que un msgstop msgyesno, msginfo o para cerrar la marca. Funciona con todos los mensajes, no sólo cierra la msgyesno función. El siguiente ejemplo puede que alguien puede hacer que funcione para cerrar la msgyesno función.
...
MsgTimer( oWnd, "Teste Fechamento da Função MsgInfo", 20 )
MsgInfo("Fecha a janela após 20 segundos!","Teste Fechamento da Função MsgInfo")
MsgTimer( oWnd, "Teste Fechamento da Função MsgYesNo", 20 )
MsgYesNo("Fecha a janela após 20 segundos!","Teste Fechamento da Função MsgYesNo")
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\
FUNCTION MsgTimer(oWnd, cMessageCaption, nSeconds)
//****************************************************************************
//
// Fechar um MsgDialog automaticamente
// Parametros: cMessageCaption, nSegundos
// Retorno: Nenhum
//
//****************************************************************************
oTmr := NIL
DEFINE Timer oTmr OF oWnd INTERVAL 1000 ACTION DoIncTimer(cMessageCaption, nSeconds, oWnd)
ACTIVATE TIMER oTmr
RETURN( NIL )
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\
STATIC FUNCTION DoIncTimer(cMessageCaption, nSeconds, oWnd)
//****************************************************************************
//
// Tarefa a ser executada antes de estourar o timer
// Parametros: cMessageCaption, nSeconds
// Retorno: Nenhum
//
//****************************************************************************
LOCAL lRetorno
STATIC nHandle := -1
STATIC nTempo := 0
IF nHandle <= 0
nHandle := FindWindow( 0, cMessageCaption )
SetWindowText( nHandle, cMessageCaption + " (" + StrTrim(nSeconds - nTempo) + ")")
ENDIF
IF nHandle > 0
//
//-- Começa a contar a partir do momento que acha a janela ---------//
//
nTempo++
IF nTempo == nSeconds
//
//-- Se estorou o tempo fecha a janela e destroi o timer --------//
//
oTmr:Deactivate()
lRetorno:=SendMessage( nHandle, WM_CLOSE )
nHandle:=-1
nTempo:=0
oTmr:End()
RELEASE oTmr
ELSE
//
//-- Exibe a contagem do tempo ----------------------------------//
//
SetWindowText(nHandle,cMessageCaption + " (" + StrTrim(nSeconds - nTempo) + ")")
ENDIF
ENDIF
Return( NIL )
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\