timer y Folder

timer y Folder

Postby goosfancito » Sun Jul 15, 2007 3: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?
Code: Select all  Expand view
#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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Postby R.F. » Mon Jul 16, 2007 3:13 am

Arranca el timer en el ON INIT del dialogo.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby goosfancito » Mon Jul 16, 2007 8:15 am

RF wrote:Arranca el timer en el ON INIT del dialogo.


En mi caso que hago esto:

Code: Select all  Expand view
   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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Postby thefull » Mon Jul 16, 2007 9:43 am

goosfancito wrote:
RF wrote:Arranca el timer en el ON INIT del dialogo.


En mi caso que hago esto:

Code: Select all  Expand view
   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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby R.F. » Mon Jul 16, 2007 3: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.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 87 guests