Problema al actualizar un LISTBOX con un TIMER

Problema al actualizar un LISTBOX con un TIMER

Postby PP1963 » Sat Oct 24, 2009 4: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->_="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.
User avatar
PP1963
 
Posts: 22
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

Re: Problema al actualizar un LISTBOX con un TIMER

Postby Antonio Linares » 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: Select all  Expand view

#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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Problema al actualizar un LISTBOX con un TIMER

Postby PP1963 » Sun Oct 25, 2009 8: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.
User avatar
PP1963
 
Posts: 22
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

Re: Problema al actualizar un LISTBOX con un TIMER

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Problema al actualizar un LISTBOX con un TIMER

Postby PP1963 » Mon Oct 26, 2009 7: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: Select all  Expand view
[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->_="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.
User avatar
PP1963
 
Posts: 22
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España

Re: Problema al actualizar un LISTBOX con un TIMER

Postby PP1963 » Wed Oct 28, 2009 7:23 am

Un poquito de ayuda por favor. :roll:
La perseverancia es la virtud de los que llegan a la meta.
User avatar
PP1963
 
Posts: 22
Joined: Sat Oct 24, 2009 11:55 am
Location: Murcia - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 88 guests