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]