FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema al actualizar un LISTBOX con un TIMER
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Problema al actualizar un LISTBOX con un TIMER
Posted: Sat Oct 24, 2009 04:41 PM

Buenas a todos.

Soy nuevo en el foro, y aunque os leo mucho, hasta ahora no habia porteado nada.
He hecho algunas aplicaciones en clipper a nivel personal, y hasta ahora, no me habia animado a adentrarme en fivewin.
El hecho de postear, es porque soy incapar de lograr que cuando pico en una LISTBOX despues de haberse actualizado con un timer no me de fallo de apertura de base de datos.
Os dajunto el codigo por si me podeis ayudar. Gracias mil anticipadas.

include "FiveWin.ch"

static oWnd, oLbx, oTimer, Z

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

function Main()

DEFINE dialog oWnd FROM 0, 0 TO 50, 120 ;
TITLE "PASO DE ATLETAS EN TIEMPO REAL . . ." COLOR CLR_WHITE STYLE DS_MODALFRAME

USE datos new shared
index on datos->puesto to pue
use datos shared index pue
count to z for datos->puesto >= 1

if !file("datos2.dbf")
copy to datos2
use datos2 shared
endif

ACTIVATE DIALOG oWnd ON INIT oWnd:SetMenu( BuildMenu()) CENTERED

return nil
//----------------------------------------------------------------------------//
function BuildMenu()

local oMenu
MENU oMenu
MENUITEM "&Tiempo real"
MENU
MENUITEM "&Activar" ACTION Timer1()
SEPARATOR
MENUITEM "&Salir" ACTION oWnd:End()
ENDMENU
ENDMENU

return oMenu
//-------------------------------------------------------------------------
function Timer1()

DEFINE TIMER oTimer interval 1000 ACTION lahora() ;

ACTIVATE TIMER oTimer

return nil
//----------------------------------------------------------------------------
func lahora()

local oLbx, x

use datos shared
count to x for datos->puesto >= 1

  if x > z

     index on datos->puesto to pue
     set index to pue
     set filter to datos->puesto >= 1
     copy to datos2
     use datos2 shared

    @ 0, 0 LISTBOX oLbx FIELDS str(datos2->puesto,4),;
                                oemtoansi(datos2->nombreyape),;
                                datos2->club,;
                                datos2->local,;
                                datos2->licencia,;
                                datos2->minusvalid ;
            HEADERS "PUESTO", "NOMBRE","CLUB", "LOC.","FED.", "MIN."  ;
            FIELDSIZES 50, 210, 150, 40, 40, 40 ;
            SIZE 1000, 700 OF oWnd

            oLbx:nClrText = { || iif(datos2->sexo="HOMBRE",SColor( 0), sColor(1)) }
            oLbx:refresh()

            go lastrec()-46

     z=x

  endif

return nil
//----------------------------------------------------------------------------//
static function SColor( nNivel )

local nColor := CLR_BLACK

do case
case nNivel == 1
nColor = CLR_HRED

  case nNivel == 2
       nColor = CLR_WHITE

  case nNivel == 3
       nColor = CLR_HBLUE
  case nNivel == 4
       nColor = CLR_RED

  case nNivel == 5
       nColor = CLR_GREEN

  case nNivel == 6
       nColor = CLR_BLUE

  case nNivel == 7
       nColor = CLR_BLACK

  case nNivel == 8
        nColor = CLR_YELLOW

endcase

return nColor

La perseverancia es la virtud de los que llegan a la meta.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Problema al actualizar un LISTBOX con un TIMER
Posted: Sun Oct 25, 2009 12:01 PM
Nicolás,

Bienvenido a los foros :-)

Te he arreglado un poco el código para que no falle:
Code (fw): Select all Collapse
#include "FiveWin.ch"

static oWnd, oLbx, oTimer, Z

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

function Main()

   DEFINE dialog oWnd FROM 0, 0 TO 50, 120 ;
      TITLE "PASO DE ATLETAS EN TIEMPO REAL . . ." COLOR CLR_WHITE STYLE DS_MODALFRAME

   if ! File( "datos.dbf" )
      DbCreate( "datos.dbf", { { "puesto", "N", 4, 0 },;
                               { "nombreyape","C", 50, 0 },;
                               { "club", "C", 30, 0 },;
                               { "local", "C", 30, 0 },;
                               { "licencia", "C", 30, 0 },;
                               { "minusvalid", "C", 10, 0 },;
                               { "genero", "C", 10, 0 } } )
   endif   

   USE datos new shared
   
   if RecCount() == 0
      APPEND BLANK
      datos->nombreyape := "uno"
      datos->puesto     := 2
      APPEND BLANK
      datos->nombreyape := "dos"
      datos->puesto     := 3
      APPEND BLANK
     datos->nombreyape := "tres"
     datos->puesto     := 1
   endif   
   
   index on datos->puesto to pue
   use datos shared index pue
   count to z for datos->puesto >= 1
   close datos

   if ! file( "datos2.dbf" )
      copy to "datos2"
   endif
      
   use datos2 shared new

   @ 0, 0 LISTBOX oLbx FIELDS str(datos2->puesto,4),;
      oemtoansi(datos2->nombreyape),;
      datos2->club,;
      datos2->local,;
      datos2->licencia,;
      datos2->minusvalid ;
      HEADERS "PUESTO", "NOMBRE","CLUB", "LOC.","FED.", "MIN." ;
      FIELDSIZES 50, 210, 150, 40, 40, 40 ;
      SIZE 1000, 700 OF oWnd ;
      ALIAS "datos2"

   oLbx:nClrText = { || iif(datos2->genero="HOMBRE",SColor( 0), sColor(1)) }

   ACTIVATE DIALOG oWnd ON INIT oWnd:SetMenu( BuildMenu()) CENTERED

return nil
//----------------------------------------------------------------------------//
function BuildMenu()

local oMenu
MENU oMenu
MENUITEM "&Tiempo real"
MENU
MENUITEM "&Activar" ACTION Timer1()
SEPARATOR
MENUITEM "&Salir" ACTION oWnd:End()
ENDMENU
ENDMENU

return oMenu
//-------------------------------------------------------------------------
function Timer1()

DEFINE TIMER oTimer interval 1000 ACTION lahora() 

ACTIVATE TIMER oTimer

return nil
//----------------------------------------------------------------------------
func lahora()

local x

use datos shared new
count to x for datos->puesto >= 1

if x > z

   index on datos->puesto to pue
   set index to pue
   set filter to datos->puesto >= 1
   copy to datos2
   use datos2 shared

   oLbx:refresh()

   go lastrec()-46

   z=x

endif

close datos

return nil

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

static function SColor( nNivel )

local nColor := CLR_BLACK

do case
case nNivel == 1
nColor = CLR_HRED

case nNivel == 2
nColor = CLR_WHITE

case nNivel == 3
nColor = CLR_HBLUE
case nNivel == 4
nColor = CLR_RED

case nNivel == 5
nColor = CLR_GREEN

case nNivel == 6
nColor = CLR_BLUE

case nNivel == 7
nColor = CLR_BLACK

case nNivel == 8
nColor = CLR_YELLOW
endcase

return nColor
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Re: Problema al actualizar un LISTBOX con un TIMER
Posted: Sun Oct 25, 2009 08:20 PM

Muchas gracias Antonio por contestar y dedicarme tiempo. Pero sigue dando fallo al aumentar X. Da el siguiente fallo:

Application

Path and name: C:\PRO_WIN\PPP.EXE (32 bits)
Size: 1,344,000 bytes
Time from start: 0 hours 0 mins 8 secs
Error occurred at: 10/25/09, 21:17:45
Error description: (DOS Error 32) DBFNTX/1004 Create error: datos2.dbf

Stack Calls

Called from: => __DBCOPY(0)
Called from: ppp.prg => LAHORA(99)
Called from: ppp.prg => (b)TIMER1(81)
Called from: TIMER.PRG => TIMEREVENT(0)
Called from: WINDOW.PRG => (b)TWINDOW:TWINDOW(0)
Called from: WINDOW.PRG => TDIALOG:TIMER(0)
Called from: WINDOW.PRG => TWINDOW:HANDLEEVENT(0)
Called from: DIALOG.PRG => TDIALOG:HANDLEEVENT(0)
Called from: => DIALOGBOXINDIRECT(0)
Called from: DIALOG.PRG => TDIALOG:ACTIVATE(0)
Called from: ppp.prg => MAIN(61)

System

CPU type: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz 2400 Mhz
Hardware memory: 2048 megs

Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %

Compiler version: xHarbour build 0.99.71 Intl. (SimpLex)
Windows version: 5.1, Build 2600 Service Pack 3

Windows total applications running: 0

Variables in use

Procedure Type Value
==========================
__DBCOPY
Param 1: C "datos2"
Param 2: A Len: 0
Param 3: U
Param 4: U
Param 5: U
Param 6: U
Param 7: L .F.
Param 8: U
Param 9: U
Param 10: U
Local 1: U
Local 2: N 32
LAHORA
Local 1: N 14
(b)TIMER1
TIMEREVENT
Param 1: N 1
Local 1: N 1
(b)TWINDOW:TWINDOW
Param 1: O Class: TDIALOG
Param 2: N 1
Param 3: N 0
TDIALOG:TIMER
Param 1: N 1
Param 2: N 0
TWINDOW:HANDLEEVENT
Param 1: N 275
Param 2: N 1
Param 3: N 0
TDIALOG:HANDLEEVENT
Param 1: N 275
Param 2: N 1
Param 3: N 0
Local 1: O Class: TDIALOG
DIALOGBOXINDIRECT
Param 1: N 4194304
Param 2: C "€  Ûz P A S O D E A T L E T A S E N T I E M P O R E A L . . . ±P è¼e T W B R O W S E "
Param 3: N 0
Param 4: O Class: TDIALOG
TDIALOG:ACTIVATE
Param 1: U
Param 2: U
Param 3: U
Param 4: L .T.
Param 5: U
Param 6: L .T.
Param 7: B {|| ... }
Param 8: U
Param 9: U
Param 10: L .F.
Local 1: O Class: TDIALOG
Local 2: N 0
Local 3: U
Local 4: U
Local 5: U
Local 6: O Class: TDIALOG
MAIN

Linked RDDs

DBF
DBFFPT
DBFBLOB
DBFNTX

DataBases in use

1: DATOS2 RddName: DBFNTX
==============================
RecNo RecCount BOF EOF
1 12 .F. .F.

 Indexes in use                        TagName

 Relations in use

2: DATOS RddName: DBFNTX
==============================
RecNo RecCount BOF EOF
15 3330 .F. .F.

 Indexes in use                        TagName
    => datos->puesto                      PUE

 Relations in use

Classes in use:

 1 HASHENTRY
 2 HBCLASS
 3 HBOBJECT
 4 TWINDOW
 5 TDIALOG
 6 TBRUSH
 7 TCONTROL
 8 TWBROWSE
 9 TFONT
10 TSCROLLBAR
11 TMENU
12 TMENUITEM
13 TTIMER
14 ERROR
15 TREG32

Memory Analysis

  136 Static variables

Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes


La perseverancia es la virtud de los que llegan a la meta.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Problema al actualizar un LISTBOX con un TIMER
Posted: Sun Oct 25, 2009 10:57 PM

Nicolás,

Asegúrate de que cierras la DBF antes de abrirla, con CLOSE datos2

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Re: Problema al actualizar un LISTBOX con un TIMER
Posted: Mon Oct 26, 2009 07:46 PM
Antonio desconocia la opción SELECT en un LISTBOX, al ponerla he conseguido que inicie bien, pero al activar el TIMER y al aumentar X se descontrola el LISTBOX y no aparecen los datos correctamente. Adjunto el codigo modificado:

GRACIAS.

#include "FiveWin.ch"

static oWnd, oLbx, oTimer, Z

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

function Main()

LOCAL oFiltro1
LOCAL oFiltro2

DEFINE dialog oWnd FROM 0, 0 TO 50, 120 ;
TITLE "PASO EN TIEMPO REAL . . ." COLOR CLR_WHITE STYLE DS_MODALFRAME

if ! File( "datos.dbf" )
DbCreate( "datos.dbf", { { "puesto", "N", 4, 0 },;
{ "nombreyape","C", 50, 0 },;
{ "club", "C", 30, 0 },;
{ "local", "C", 30, 0 },;
{ "licencia", "C", 30, 0 },;
{ "minusvalid", "C", 10, 0 },;
{ "genero", "C", 10, 0 } } )
endif
Code (fw): Select all Collapse
[code][/code]

USE datos new shared

if RecCount() == 0
APPEND BLANK
datos->nombreyape := "uno"
datos->puesto := 2
APPEND BLANK
datos->nombreyape := "dos"
datos->puesto := 3
APPEND BLANK
datos->nombreyape := "tres"
datos->puesto := 1
endif

index on datos->puesto to pue
use datos shared index pue
count to z for datos->puesto >= 1


@ 0, 0 LISTBOX oLbx FIELDS str(datos->puesto,4),;
oemtoansi(datos->nombreyape),;
datos->club,;
datos->local,;
datos->licencia,;
datos->minusvalid ;
HEADERS "PUESTO", "NOMBRE","CLUB", "LOC.","FED.", "MIN." ;
FIELDSIZES 50, 210, 150, 40, 40, 40 ;
SIZE 475, 355 OF oWnd ;
SELECT datos->puesto FOR 1 to 50000

oLbx:nClrText = { || iif(datos->SEXO="HOMBRE",SColor( 0), sColor(1)) }

ACTIVATE DIALOG oWnd ON INIT oWnd:SetMenu( BuildMenu()) CENTERED

return nil
//----------------------------------------------------------------------------//
function BuildMenu()

local oMenu
MENU oMenu
MENUITEM "&Tiempo real"
MENU
MENUITEM "&Activar" ACTION Timer1()
SEPARATOR
MENUITEM "&Salir" ACTION oWnd:End()
ENDMENU
ENDMENU

return oMenu
//-------------------------------------------------------------------------
function Timer1()

DEFINE TIMER oTimer interval 1000 ACTION lahora()

ACTIVATE TIMER oTimer

return nil
//----------------------------------------------------------------------------
func lahora()

local x

//use datos shared new
count to x for datos->puesto >= 1

if x > z


oLbx:refresh()

if x>=49
go lastrec()-49
endif

z=x

endif

//close datos

return nil


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

static function SColor( nNivel )

local nColor := CLR_BLACK

do case
case nNivel == 1
nColor = CLR_HRED

case nNivel == 2
nColor = CLR_WHITE

case nNivel == 3
nColor = CLR_HBLUE
case nNivel == 4
nColor = CLR_RED

case nNivel == 5
nColor = CLR_GREEN

case nNivel == 6
nColor = CLR_BLUE

case nNivel == 7
nColor = CLR_BLACK

case nNivel == 8
nColor = CLR_YELLOW
endcase

return nColor
La perseverancia es la virtud de los que llegan a la meta.
Posts: 22
Joined: Sat Oct 24, 2009 11:55 AM
Re: Problema al actualizar un LISTBOX con un TIMER
Posted: Wed Oct 28, 2009 07:23 AM

Un poquito de ayuda por favor. :roll:

La perseverancia es la virtud de los que llegan a la meta.

Continue the discussion