timer y Folder

Post Reply
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

timer y Folder

Post by goosfancito »

Estimados, tengo un dialogo con un folder y necesito refrescar cada cierto tiempo el browser.

Problema.
Solo se lanza la accion del timer cuando cierro el dialogo.

Alguna Idea?

Code: Select all

#include "fivewin.ch"
#include "folder.ch"
#include "tsbrowse.ch"
#include "debug.ch"
#include "colores.ch"

//------------------------------------------------------------------------------

FUNCTION PantallaPrincipal()

   LOCAL oDlg, ;
         oIcono, ;
         oFolder, ;
         oBrw, ;
         oTimer

   LOCAL oQuery

   DEFINE ICON oIcono RESOURCE "ICON_DIPAI"

   oQuery:= GetApp():LeerTabla( { "guia.*" }, , , "idguia" )

   DEFINE DIALOG oDlg RESOURCE "DLG_MENU" TITLE "prueba Direcciones útiles ::. " ICON oIcono

      //----------( Folder )----------

      REDEFINE FOLDER oFolder ID 114 OF oDlg ;
               PROMPTS " &Padrón de datos existentes ", "&Alta, Bajas, Modificaciones",;
                       " Mensaje a otro usuario ", "&Datos del Usuario Actual" ;
               DIALOGS "FLD_BROWSER", "FLD_ABM",;
                       "FLD_MENSAJES", "FLD_USUARIOS";
               UPDATE

      //----------( Browser )----------

      REDEFINE BROWSE oBrw ID 101 OF oFolder:aDialogs[1] FONT GetFont():celda

         // Identificacion
         ADD COLUMN TO oBrw ;
            Header "Nombre o Entidad" ;
            DATA SetearColumna( oQuery, 1 );
            ALIGN DT_CENTER, DT_CENTER WIDTH 200 PIXELS

         ADD COLUMN TO oBrw ;
            Header "Domicilio" ;
            DATA SetearColumna( oQuery, 2 );
            ALIGN DT_CENTER, DT_CENTER WIDTH 200 PIXELS

         ADD COLUMN TO oBrw ;
            Header "Teléfono" ;
            DATA SetearColumna( oQuery, 3 );
            ALIGN DT_CENTER, DT_CENTER WIDTH 200 PIXELS

         MySetBrowse( oBrw, oQuery )

         oBrw:ChangeFont( GetFont():ENCABEZADO, , 2 )

         oBrw:aColumns[1]:lEdit := .F.
         oBrw:aColumns[2]:lEdit := .F.
         oBrw:aColumns[3]:lEdit := .F.

         oBrw:nAdjColumn        := 3
         oBrw:lAutoEdit         := .F.
         oBrw:nHeightHead       += 15
         oBrw:nHeightCell       += 8
         oBrw:lNoHScroll        := .T.
         oBrw:lNovScroll        := .F.

         oBrw:Look3d( .T., , , .T. )
         oBrw:SetColor( { 2, 5, 6, 15, 8 },;
                               { { ||  If( oBrw:nLogicPos() % 2 =  0,CLR_1, CLR_2 ) },;
                                 CLR_WHITE,;
                                 CLR_BLUE ,;
                                 CLR_GRAY ,;
                                 { | | If( oBrw:nLogicPos() % 2 =  0,CLR_1, CLR_2 ) } } )


         oDlg:bStart:= { || Timer( oTimer, oBrw, oQuery, oDlg ) }

   ACTIVATE DIALOG oDlg CENTERED

   RETURN ( NIL )

//------------------------------------------------------------------------------

FUNCTION timer( oTimer, oBrw, oQuery, oDlg )

   DEFINE timer oTimer interval 1000 of oDlg action ( RecargarBrowser( @oBrw, @oQuery ) )
   ACTIVATE timer oTimer

RETURN ( NIL )

//------------------------------------------------------------------------------

// Esta accion solo se ejecuta cuando se cierra el dialogo, mientras
// el dialogo esta en pantalla no pasa nada.

FUNCTION RecargarBrowser( oBrw, oQuery )

   oQuery:= GetApp():LeerTabla( { "guia.*" }, , , "idguia" )
   MySetBrowse( oBrw, oQuery )
   oBrw:refresh()

   ? "paso por aca"


   RETURN ( NIL )

//------------------------------------------------------------------------------


Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Arranca el timer en el ON INIT del dialogo.
Saludos
R.F.
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Post by goosfancito »

RF wrote:Arranca el timer en el ON INIT del dialogo.
En mi caso que hago esto:

Code: Select all

   oDlg:bStart:= { || Timer( oTimer, oBrw, oQuery, oDlg ) }

   ACTIVATE DIALOG oDlg CENTERED 
el bloque bStart no estaría haciendo el on init? o son cosas diferentes el ON INIT y el bStart?

Gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Post by thefull »

goosfancito wrote:
RF wrote:Arranca el timer en el ON INIT del dialogo.
En mi caso que hago esto:

Code: Select all

   oDlg:bStart:= { || Timer( oTimer, oBrw, oQuery, oDlg ) }

   ACTIVATE DIALOG oDlg CENTERED 
el bloque bStart no estaría haciendo el on init? o son cosas diferentes el ON INIT y el bStart?

Gracias.
No.
bStart es un codeblock que se lanza cuando el dialogo ya a sido creado, el bInit es ANTES de que se cree.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Son 2 cosas distintas.

Sucede que los timers unicamente pueden utilizarse desde ventanas, y no desde dialogos.

Debes utilizar el evento ON INIT ya que es en este evento en el que el dialogo tiene atributos de ventana y puede aceptar el arranque del timer, y que este a su vez se pueda "colgar" al sistema de envios de mensajes.

El bSTart no te sirve, porque como bien menciona Rafa, ese evento se ejecuta una vez que el dialogo ya tiene atributos de dialogo, es decir, ya es modal y no esta "bombeando" los mensajes de Windows.
Saludos
R.F.
Post Reply