FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour timer y Folder
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
timer y Folder
Posted: Sun Jul 15, 2007 03:07 AM
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?
#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 )

//------------------------------------------------------------------------------
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
timer y Folder
Posted: Mon Jul 16, 2007 03:13 AM

Arranca el timer en el ON INIT del dialogo.

Saludos

R.F.
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
timer y Folder
Posted: Mon Jul 16, 2007 08:15 AM
RF wrote:Arranca el timer en el ON INIT del dialogo.


En mi caso que hago esto:

   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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
timer y Folder
Posted: Mon Jul 16, 2007 09:43 AM
goosfancito wrote:
RF wrote:Arranca el timer en el ON INIT del dialogo.


En mi caso que hago esto:

   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__)
Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
timer y Folder
Posted: Mon Jul 16, 2007 03:47 PM

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.

Continue the discussion