Page 1 of 1
MsgYesNo() + Timer
Posted: Wed Oct 05, 2011 1:58 pm
by Joao Cezar
Olá
Alguém já modificou a função MsgYesNo() para que caso o usuário não esteja próximo ao pc, após 15 segundos ela se feche e o sistema continue o seu processamento?
Re: MsgYesNo() + Timer
Posted: Wed Oct 12, 2011 11:47 am
by MarioG
Joao;
Acá tienes una idea sobre el uso de un Boton con timer
Code: Select all
REDEFINE BUTTON aO[_BCancel] PROMPT "Comprimir" ID 550 OF soDlg
ACTION ( ::DOPackFiles( aO ), ; // Comprime Archivos
aO[_BCancel]:SetText( "Hecho" ), soDlg:Setfocus(), ;
::SetTimer( aO[_BCancel] ) // Activa tiempo de Pausa
....
// ------------------------------------------------------------------------- \\
// Timer de Salida de Dlg
//
METHOD SetTimer( oBtn ) CLASS TDbf2FTP
static nMaxTmr:= 6
local oSelf:= Self, ;
oTimer
DEFINE TIMER oTimer OF soDlg INTERVAL nMaxTmr*200 ; // Retardo 6segs
ACTION if( nMaxTmr >= 1, ( oBtn:SetText("&Salir..."+Str(nMaxTmr,1) ), --nMaxTmr ), ;
( nMaxTmr:= 6, oTimer:End(), ;
soDlg:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 ) ) )
ACTIVATE TIMER oTimer
return( nil )
Re: MsgYesNo() + Timer
Posted: Wed Oct 12, 2011 4:15 pm
by Joao Cezar
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.
[code]
...
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 )
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\
[/code]