msgAlert se comporta independiente

msgAlert se comporta independiente

Postby JoseAlvarez » Mon Oct 24, 2022 2:02 am

Hola a todos, esperando que se encuentren muy bien,

Tengo establecido un tiempo maximo en mi aplicacion para que el usuario este inactivo, es decir sin ejecutar nada en la PC, es decir sin tocar el teclado ni el raton. Si esto sucede, aparece un msgAlert() indicando que el tiempo se ha cumplido y la sesion expiró, hasta ahi todo bien, como se muestra en la imagen:

https://datanet.space/fw/aw1.jpg

El problema se presenta cuando la aplicacion esta minimizada. Al vencerse el tiempo, el msgalert() y la ventana se muestran independientes, y al querer maximizar, solo se levanta aquella en que se haga click.

Lo que quiero es que al hacer click bien sea en el msgAlert() o en la ventana, ambos se levanten. Ace dejo un video para graficar lo que sucede.

https://datanet.space/fw/Aw3.mp4

Otra cosa es que para controlar el tiempo, uso la funcion sysIdleSecs() pero la misma controla todo el equipo y quisiera que funcionara solo dentro de mi aplicacion si es posible. Es decir, si se minimiza la aplicacion y el usuario se va por decir a word y tarda alli mas de el tiempo establecido, ese tiempo mi sistema no lo toma en cuenta, es decir no se cierra, solo se cierra cuando el usuario no hace absolutamente nada en la PC.

Alguna idea de como hacerlo u otra forma que funcione como quiero?
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: msgAlert se comporta independiente

Postby karinha » Mon Oct 24, 2022 12:57 pm

Code: Select all  Expand view  RUN

// tinativo.prg - By William Adami
// exemplo do uso da classe Tinativo
// Apos um tempo de inatividade do mouse
// e do teclado chama uma funcao qualquer.

#include "fivewin.ch"

STATIC oWnd

//************

FUNCTION Main()

   LOCAL nTempo_espera, cNome_funcao, lTimercontinua

   // Tempo a ser esperado ate chamar a funcao
   // -> 1 hora tem 3600 segundos.
   nTempo_espera := 10  // segundos.

   // nome da funcao a ser chamada quando
   // chegar no tempo de espera
   cNome_funcao := "LOGOFF()"  
   // se apos executar a funcao , continua
   // monitorando a inatividade do mouse e teclado.
   lTimercontinua := .F.

   define window oWnd title "Teste de teclado e mouse"

   activate window oWnd ;
      ON INIT tinativo():new( nTempo_espera, cNome_funcao, lTimerContinua )

RETURN NIL

FUNCTION LOGOFF()

   // msgalert( "AQUI ENTRA SUA FUNCAO DE LOGOFF !", "AVISO" )

   IF MsgYesNo( OemToAnsi( "ATEN€ÇO USUµRIO:                       " )+CRLF+ ;
                OemToAnsi( "PROTEJA OS BANCOS DE DADOS DO PROGRAMA." )+CRLF+ ;
                OemToAnsi( "SE NÇO ESTIVER USANDO O WINORCAM.EXE,  " )+CRLF+ ;
                OemToAnsi( "DESLIGUE-O PARA NÇO CORRER RISCOS.     " )+CRLF+ ;
                OemToAnsi( "POSSO DESLIGAR O PROGRAMA? <S> ou <N>??" ),      ;
                OemToAnsi( "AVISO PARA DESLIGAR O WINORCAM.EXE...  " ) )

      //--Fecha o Programa Definitivamente
      LIBERA_TUDO()  // ESTA EM WINORCAM.PRG

      // QUIT

   ENDIF

RETURN NIL

//   tinativo.prg

#include "fivewin.ch"

CLASS TINATIVO

   DATA nTimeInpAntes
   DATA nTimeInpDepois
   DATA cTimeAtu
   DATA nTempo
   DATA oTimerTime
   DATA cFunc
   DATA lContinuar

   METHOD NEW( nTime, cFuncao, lContinua )  CONSTRUCTOR

   METHOD ver_tempo()

ENDCLASS

METHOD new( ntime, cFuncao, lContinua ) CLASS TINATIVO

   ::cfunc := cfuncao
   ::ntempo := ntime
   ::lContinuar := lContinua
   ::oTimerTime := TTimer():New( 1000, { || ::VER_TEMPO() } )
   ::oTimerTime:Activate()
   ::cTimeAtu := time()
   ::nTimeInpAntes := getInputState()    // 0 = erro

RETURN self

METHOD VER_TEMPO CLASS TINATIVO

   LOCAL AUX

   ::nTimeInpDepois := getInputState()

   IF ( ::nTimeInpDepois - ::nTimeInpAntes ) > 0

      ::nTimeInpAntes := getInputState()

      ::cTimeAtu := time()

   ENDIF


   IF ( CONVTIME( time() ) - CONVTIME( ::cTimeAtu ) ) > ::ntempo

      ::oTimerTime:DeActivate()

      aux := ::cfunc
   
      // aqui executa a funcao

      &aux

      if ::lContinuar

         ::oTimerTime:Activate()
         ::cTimeAtu := time()

      ENDIF


   ENDIF

RETURN NIL

FUNCTION CONVTIME( ZZ )

   LOCAL Z

   Z := ( VAL( LEFT(ZZ,2 ) ) * 360 ) + ( VAL( SUBSTR(ZZ,4,2 ) ) * 60 ) + ;
          VAL( RIGHT( ZZ,2 ) )

RETURN Z

//*----------------------------------------------------------------------
#pragma BEGINDUMP
#define _WIN32_WINNT 0x0500
#define WINVER 0x0500
#include "windows.h"
#include "hbapi.h"
HB_FUNC( GETINPUTSTATE )
{
LASTINPUTINFO lpi;
lpi.cbSize = sizeof(LASTINPUTINFO);
if (!GetLastInputInfo(&lpi))
{
hb_retni(0);
}
hb_retni(lpi.dwTime);
}
#pragma ENDDUMP
 
// FIN / END
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: msgAlert se comporta independiente

Postby horacio » Tue Oct 25, 2022 12:22 pm

Hola, es el comportamiento normal de una dialogo con respecto a la ventana. Se me ocurre que cuando el tiempo expira verificaría el estado de la ventana, si está minimizada la maximizaría y después mostraría el MsgAlert.

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: msgAlert se comporta independiente

Postby JoseAlvarez » Tue Oct 25, 2022 2:09 pm

horacio wrote:Hola, es el comportamiento normal de una dialogo con respecto a la ventana. Se me ocurre que cuando el tiempo expira verificaría el estado de la ventana, si está minimizada la maximizaría y después mostraría el MsgAlert.

Saludos


Hola Horacio! saludos!

Excelente ! se ve una solución Simple y que debería funcionar a la primera...
Voy a aplicarlo y te comento,

Gracias !!
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: msgAlert se comporta independiente

Postby JoseAlvarez » Wed Oct 26, 2022 12:51 pm

horacio wrote:Hola, es el comportamiento normal de una dialogo con respecto a la ventana. Se me ocurre que cuando el tiempo expira verificaría el estado de la ventana, si está minimizada la maximizaría y después mostraría el MsgAlert.

Saludos


Listo amigo, funcionó de lujo!

Muchas Gracias !!

Un abrazo!

Joao, probé el TINACTIVO , funciona exactamente igual al sysIdleSecs() , toma en cuenta el tiempo inactivo de todo el equipo, no de mi aplicacion.

Gracias por tu generosa ayuda de siempre!
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: msgAlert se comporta independiente

Postby karinha » Wed Oct 26, 2022 1:05 pm

José, como funciona este sysIdleSecs() ? Puedes hacer un pequeño ejemplo, por favor?

Gracias.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: msgAlert se comporta independiente

Postby JoseAlvarez » Wed Oct 26, 2022 1:17 pm

karinha wrote:José, como funciona este sysIdleSecs() ? Puedes hacer un pequeño ejemplo, por favor?

Gracias.

Regards, saludos.


Seguro que si amigo mio, el fin de semana preparo algo sencillo y lo dejo por acá !!
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: msgAlert se comporta independiente

Postby horacio » Thu Oct 27, 2022 10:23 pm

Me alegro!, Abrazo.
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 52 guests