Control de Tiempos - Cronometro.

Control de Tiempos - Cronometro.

Postby Garbi » Wed Dec 16, 2015 11:24 am

Hola quiero hacer una aplicación para poder controlar los tiempos por sectores y el total de la vuelta de mi hijo que esta conduciendo en Karts y quiere tenerlo todo registrado.
Vamos tipo Formula 1. Debe hacer un cronometro general, un por vuelta que yo pueda ir pulsando una tecla (por ejemplo en un listbox) para cada sector y despues el tiempo total de la vuelta.
Claro debe de ir en milesimas de segundo, he estado revisando y creo que debo hacerlo con la clase timer, pero el cronometro se tiene que ir refrescando cada milisengudo, bueno creo que he dejado un poco claro lo que quiero hacer.

¿Alguien podria echarme una mano y darme alguna idea de como controlar esos tiempos?

Muchas Gracias.
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 341
Joined: Wed Nov 02, 2005 3:28 pm

Re: Control de Tiempos - Cronometro.

Postby karinha » Wed Dec 16, 2015 2:16 pm

Code: Select all  Expand view  RUN

#Include "FiveWin.Ch"

Static oDlg

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

Function Contador_Simples()

DEFINE DIALOG oDlg ;
TITLE "Cronometro Simples" ;
FROM 10, 10 TO 23, 70

oDlg:lHelpIcon := .F.

@ 004, 002 BUTTON "Cronometro" ;
ACTION( Cronometro() ) ;
OF oDlg

@ 004, 015 BUTTON "&Saida" OF oDlg ;
ACTION ( oDlg:End ) CANCEL

ACTIVATE DIALOG oDlg

Return Nil

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

Function Cronometro()

Local Cronometro
Local nHora_Calc
Local nSegundos

// Calculo Sobre 24 Horas de um dia... Cada Hora Tem 3.600 Segundos.
Cronometro := 0 // Contador de Segundos do Cronometro.
nHora_Calc := 0 // Quantidade de Horas Que Ele Vai Achar.
nSegundos := 86400 // Quantidade de Segundos Para Se Achar as Horas.

@ 03, 20 Say "Em Segundos " Of oDlg

For Cronometro := 1 To nSegundos // -> Segundos a Calcular Para Horas

nHora_Calc := 0

oDlg:Say( 03, 10, Cronometro )

SysRefresh()

// Formula Para Calcular em Horas...
nHora_Calc := ( nHora_Calc ) + ( Cronometro / 60 ) / 60

Next Cronometro

@ 05, 10 Say "Em Horas: " Of oDlg // Resultado: 24:00:00 hrs.

@ 07, 10 Say nHora_Calc Picture "99.99.99.99" Of oDlg

Return Nil
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7852
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Control de Tiempos - Cronometro.

Postby karinha » Wed Dec 16, 2015 2:21 pm

Code: Select all  Expand view  RUN

#Include "FiveWin.Ch"

Static nGet
Static oBmp1, oBmp2, oBmp3, oBmp4, oBmp5

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

Function Velocimetro()

Local oDlg, oGet

nGet := 0

DEFINE DIALOG oDlg FROM 0, 0 TO 20, 60 ;
TITLE "Mostrando um Velocimetro/Cronômetro"
// Mostrando Barras Verticais no Mostrador(Display)

oDlg:lHelpIcon := .F.

//--------------------Área do DisPlay do Cronômetro------------------------

/* Cada dígito é de 34 x 48 */

/* Copie o "DisPlay.Bmp" de \FW..\BitMaps\ Para o Seu Diretório de Uso */

@ 002, 001 SAY 'Contador : ' OF oDlg

@ 000, 000 BITMAP oBmp1 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp2 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp3 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp4 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp5 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

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

oBmp1:nTop := 28
oBmp1:nLeft := 80
oBmp1:nBottom := 52
oBmp1:nRight := 97

oBmp2:nTop := 28
oBmp2:nLeft := 98
oBmp2:nBottom := 52
oBmp2:nRight := 115

oBmp3:nTop := 28
oBmp3:nLeft := 116
oBmp3:nBottom := 52
oBmp3:nRight := 133

oBmp4:nTop := 28
oBmp4:nLeft := 134
oBmp4:nBottom := 52
oBmp4:nRight := 151

oBmp5:nTop := 28
oBmp5:nLeft := 152
oBmp5:nBottom := 52
oBmp5:nRight := 169

//--------------------Área dos Say's---------------------------------------

@ 002, 030 SAY "Evandro 1 Minuto" OF oDlg
@ 2.5, 030 SAY "Tem 60 Segundos " OF oDlg

@ 004, 010 SAY "Use Sua Imaginação... Estás Trabalhando Com Horas..." OF oDlg

@ 005, 010 SAY "Vai Contar até 180 Milésimos de Secs = 3 Segundos. " OF oDlg

@ 006, 010 SAY "By João Santos - In FiveWin The Best! " OF oDlg

@ 007, 010 SAY "Todos os Direitos Reservados - 27/12/2003 " OF oDlg

//--------------------Área dos Botões--------------------------------------

@ 007, 002 BUTTON "&Aumentar" OF oDlg SIZE 40, 12 ;
ACTION ( nGet++, Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, nGet ) )

@ 007, 010 BUTTON "&Diminuir" OF oDlg SIZE 40, 12 ;
ACTION ( nGet--, Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, nGet ) )

@ 007, 018 BUTTON "&Executar" OF oDlg SIZE 40, 12 ;
ACTION Executar_Bmp()

@ 007, 026 BUTTON "&Saida" OF oDlg ;
ACTION ( oDlg:End ) CANCEL

ACTIVATE DIALOG oDlg CENTERED

EndDialog() // Fechar a Dialog
GlobalFree() // By João Santos - São Paulo - Brazil - Recursos Liberados
ResAllFree() // By Vagner Wirts .And. Elias Junior - Recursos Liberados

Return Nil

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

Function Executar_Bmp()

Local I

Local nSegundos

// Fórmula Para Calculo de Horas, Minutos, Segundos, Etc... Ex. Simples
nSegundos := Seconds() + ( 3600 + 5 ) / 60 * 3 //( 3 = Qtde. de Segundos)

For I = 1 To ( nSegundos - Seconds() )

Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, I )

SysRefresh()

Next I

Return Nil

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

Function Por_Bmp ( oBjeto1, oBjeto2, oBjeto3, oBjeto4, oBjeto5, nQuantidade )

Local cNum := SPACE( 5 )
Local nLen := 3
Local nDigito1 := 3
Local nDigito2 := 3
Local nDigito3 := 3
Local nDigito4 := 3
Local nDigito5 := 3

cNum := STR( nQuantidade )
nLen := LEN( cNum )

nDigito1 := VAL( SUBSTR( cNum, nLen - 4, 1 ) )

If nDigito1 = 0
oBjeto1:nX := -528 // 0 - (11 * 48)
Else
oBjeto1:nX := 0 - ( nDigito1 * 48 )
Endif

nDigito2 := VAL( SUBSTR( cNum, nLen - 3, 1 ) )

If nDigito2 = 0 .AND. nDigito1 = 0
oBjeto2:nX := -528
Else
oBjeto2:nX := 0 - ( nDigito2 * 48 )
Endif

nDigito3 := VAL( SUBSTR( cNum, nLen - 2, 1 ) )

If nDigito3 = 0 .AND. nDigito2 = 0 .AND. nDigito1 = 0
oBjeto3:nX := -528
Else
oBjeto3:nX := 0 - ( nDigito3 * 48 )
Endif

nDigito4 := VAL( SUBSTR( cNum, nLen - 1, 1 ) )

If nDigito4 = 0 .AND. nDigito3 = 0 .AND. nDigito2 = 0 .AND. nDigito1 = 0
oBjeto4:nX := -528
Else
oBjeto4:nX := 0 - ( nDigito4 * 48 )
Endif

nDigito5 := VAL( SUBSTR( cNum, nLen, 1 ) )

oBjeto5:nX := 0 - ( nDigito5 * 48 )

oBjeto5:Refresh( .F. )
oBjeto4:Refresh( .F. )
oBjeto3:Refresh( .F. )
oBjeto2:Refresh( .F. )
oBjeto1:Refresh( .F. )

SysRefresh()

Return Nil
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7852
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Control de Tiempos - Cronometro.

Postby karinha » Wed Dec 16, 2015 2:24 pm

Code: Select all  Expand view  RUN

#Include "FiveWin.Ch"

Static nGet
Static oBmp1, oBmp2, oBmp3, oBmp4, oBmp5

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

Function Velocimetro()

Local oDlg, oGet

nGet := 0

DEFINE DIALOG oDlg FROM 0, 0 TO 20, 60 ;
TITLE "Mostrando um Velocimetro/Cronômetro" ;
STYLE nOR( DS_MODALFRAME )

oDlg:lHelpIcon := .F.

//--------------------Área do DisPlay do Cronômetro------------------------

/* Cada dígito é de 34 x 48 */

/* Copie o "DisPlay.Bmp" de \FW..\BitMaps\ Para o Seu Diretório de Uso */

@ 002, 001 SAY 'Contador : ' OF oDlg

@ 000, 000 BITMAP oBmp1 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp2 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp3 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp4 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

@ 000, 000 BITMAP oBmp5 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

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

oBmp1:nTop := 28
oBmp1:nLeft := 80
oBmp1:nBottom := 52
oBmp1:nRight := 97

oBmp2:nTop := 28
oBmp2:nLeft := 98
oBmp2:nBottom := 52
oBmp2:nRight := 115

oBmp3:nTop := 28
oBmp3:nLeft := 116
oBmp3:nBottom := 52
oBmp3:nRight := 133

oBmp4:nTop := 28
oBmp4:nLeft := 134
oBmp4:nBottom := 52
oBmp4:nRight := 151

oBmp5:nTop := 28
oBmp5:nLeft := 152
oBmp5:nBottom := 52
oBmp5:nRight := 169

//--------------------Área dos Say's---------------------------------------

@ 004, 010 SAY "Caro Usuário Tenha Calma, Espere o Contador Voltar!!" OF oDlg

@ 005, 010 SAY "Vai Contar até 99.999 e Depois Regressa o Cronômetro" OF oDlg

@ 006, 010 SAY "By João Santos - In FiveWin The Best! " OF oDlg

@ 007, 010 SAY "Todos os Direitos Reservados - 27/12/2003 " OF oDlg

//--------------------Área dos Botões--------------------------------------

@ 007, 002 BUTTON "&Aumentar" OF oDlg SIZE 40, 12 ;
ACTION ( nGet++, Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, nGet ) )

@ 007, 010 BUTTON "&Diminuir" OF oDlg SIZE 40, 12 ;
ACTION ( nGet--, Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, nGet ) )

@ 007, 018 BUTTON "&Executar" OF oDlg SIZE 40, 12 ;
ACTION Executar_Bmp()

@ 007, 026 BUTTON "&Saida" OF oDlg ;
ACTION ( oDlg:End ) CANCEL

ACTIVATE DIALOG oDlg CENTERED

EndDialog() // Fechar a Dialog
GlobalFree() // By João Santos - São Paulo - Brazil - Recursos Liberados
ResAllFree() // By Vagner Wirts .And. Elias Junior - Recursos Liberados

Return Nil

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

Function Executar_Bmp()

Local I

For I = 1 To 99999 // (Step By Step... Indo/Aumentando)

Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, I )

SysRefresh()

Next I

//InKey( 1 ) // Pode-se usar este comando velho do Clipper!
SysWait( .1 ) // Eu somente uso FiveWin! He he he he...

For I = 99999 To 1 STEP -1 // (Step By Step... Voltando/Diminuindo)

Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, I )

SysRefresh()

Next I

Return Nil

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

Function Troca_Bmp( oBmp1, oBmp2, oBmp3, lSinal )

STATIC nCont := 0

Local nInc := IIF( lSinal, 1, -1 )
Local nCam := IIF( lSinal, -528, -527 )
Local nTopeI := IIF( lSinal, -576, 0 )
Local nTopeS := IIF( lSinal, 0, -576 )

If ! lSinal .And. nCont == 0
Return Nil
Endif

If oBmp3:nX == nTopeI
oBmp3:nX := nTopeS
Endif

If oBmp2:nX == nTopeI
oBmp2:nX := nTopeS
Endif

If oBmp1:nX == nTopeI
oBmp1:nX := nTopeS
Endif

oBmp3:nX -= nInc
nCont += nInc

If oBmp3:nX <= nCam
oBmp2:nX -= nInc
If oBmp2:nX <= nCam
oBmp1:nX -= nInc
Endif
Endif

oBmp3:Refresh( .F. )
oBmp2:Refresh( .F. )
oBmp1:Refresh( .F. )

Return Nil

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

Function Por_Bmp ( oBjeto1, oBjeto2, oBjeto3, oBjeto4, oBjeto5, nQuantidade )

Local cNum := SPACE( 5 )
Local nLen := 0
Local nDigito1 := 0
Local nDigito2 := 0
Local nDigito3 := 0
Local nDigito4 := 0
Local nDigito5 := 0

cNum := STR( nQuantidade )
nLen := LEN( cNum )

nDigito1 := VAL( SUBSTR( cNum, nLen - 4, 1 ) )

If nDigito1 = 0
oBjeto1:nX := -528 // 0 - (11 * 48)
else
oBjeto1:nX := 0 - ( nDigito1 * 48 )
Endif

nDigito2 := VAL( SUBSTR( cNum, nLen - 3, 1 ) )

If nDigito2 = 0 .AND. nDigito1 = 0
oBjeto2:nX := -528
else
oBjeto2:nX := 0 - ( nDigito2 * 48 )
Endif

nDigito3 := VAL( SUBSTR( cNum, nLen - 2, 1 ) )

If nDigito3 = 0 .AND. nDigito2 = 0 .AND. nDigito1 = 0
oBjeto3:nX := -528
else
oBjeto3:nX := 0 - (nDigito3 * 48)
Endif

nDigito4 := VAL( SUBSTR( cNum, nLen - 1, 1 ) )

If nDigito4 = 0 .AND. nDigito3 = 0 .AND. nDigito2 = 0 .AND. nDigito1 = 0
oBjeto4:nX := -528
else
oBjeto4:nX := 0 - (nDigito4 * 48)
Endif

nDigito5 := VAL( SUBSTR( cNum, nLen, 1 ) )

oBjeto5:nX := 0 - ( nDigito5 * 48 )

oBjeto5:Refresh( .F. )
oBjeto4:Refresh( .F. )
oBjeto3:Refresh( .F. )
oBjeto2:Refresh( .F. )
oBjeto1:Refresh( .F. )

SysRefresh()

Return Nil
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7852
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Control de Tiempos - Cronometro.

Postby Garbi » Wed Dec 16, 2015 9:02 pm

Lo he probado con timer asi, pero haciendo pruebas creo que se me va algunas milesimas desde que pulso el intro hasta que acabo el release timer.
¿podria ser?
Code: Select all  Expand view  RUN
DEFINE TIMER otime INTERVAL 0.1000 action (vtiempos:=vtiempos+1)
   activate timer otime
      vsector1:=0
      oBrwt:lEditCol(2,@vsector1,"99:999:999,999",,)
      release timer otime
      msgalert(vtiempos)
      vsector1:=vtiempos/60
      msgalert(vtiempos/60)
     (ctemporal)->sector1:=vsector1
      oBrwt: Refresh()
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 341
Joined: Wed Nov 02, 2005 3:28 pm

Re: Control de Tiempos - Cronometro.

Postby jnavas » Wed Apr 01, 2020 2:24 pm

Saludos y Gracias
Compilare sin llamar esta funcion.
Si puedes enviarla por favor, mi correo adaptaprodrive@gmail.com
'_HB_FUN_RESALLFREE' referenced from C:\FWH17\SAMPLES\VELOCIMETRO.OBJ
User avatar
jnavas
 
Posts: 479
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Control de Tiempos - Cronometro.

Postby karinha » Wed Apr 01, 2020 2:35 pm

Haga asi:

Code: Select all  Expand view  RUN

// RESALLFREE()
 


Esto no se usa más en 32 bits,

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7852
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Control de Tiempos - Cronometro.

Postby karinha » Wed Apr 01, 2020 6:32 pm

Code: Select all  Expand view  RUN

#include "FiveWin.Ch"

STATIC nGet
STATIC oBmp1, oBmp2, oBmp3, oBmp4, oBmp5

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

FUNCTION Velocimetro()

   LOCAL oDlg, oGet

   nGet := 0

   DEFINE DIALOG oDlg FROM 0, 0 TO 20, 60          ;
      TITLE "Mostrando um Velocimetro/Cronômetro" ;
      STYLE nOR( DS_MODALFRAME )

   oDlg:lHelpIcon := .F.

//--------------------Área do DisPlay do Cronômetro------------------------

   /* Cada dígito é de 34 x 48 */

   /* Copie o "DisPlay.Bmp" de \FW..\BitMaps\ Para o Seu Diretório de Uso */

   @ 002, 001 SAY 'Contador : ' OF oDlg

   @ 000, 000 BITMAP oBmp1 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

   @ 000, 000 BITMAP oBmp2 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

   @ 000, 000 BITMAP oBmp3 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

   @ 000, 000 BITMAP oBmp4 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

   @ 000, 000 BITMAP oBmp5 FILE "..\BitMaps\DisPlay.Bmp" OF oDlg

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

   oBmp1:nTop    := 28
   oBmp1:nLeft   := 80
   oBmp1:nBottom := 52
   oBmp1:nRight  := 97

   oBmp2:nTop    := 28
   oBmp2:nLeft   := 98
   oBmp2:nBottom := 52
   oBmp2:nRight  := 115

   oBmp3:nTop    := 28
   oBmp3:nLeft   := 116
   oBmp3:nBottom := 52
   oBmp3:nRight  := 133

   oBmp4:nTop    := 28
   oBmp4:nLeft   := 134
   oBmp4:nBottom := 52
   oBmp4:nRight  := 151

   oBmp5:nTop    := 28
   oBmp5:nLeft   := 152
   oBmp5:nBottom := 52
   oBmp5:nRight  := 169

//--------------------Área dos Say's---------------------------------------

   @ 004, 010 SAY "Caro Usuário Tenha Calma, Espere o Contador Voltar!!" OF oDlg

   @ 005, 010 SAY "Vai Contar até 99.999 e Depois Regressa o Cronômetro" OF oDlg

   @ 006, 010 SAY "By João Santos - In FiveWin The Best! " OF oDlg

   @ 007, 010 SAY "Todos os Direitos Reservados - 27/12/2003 " OF oDlg

//--------------------Área dos Botões--------------------------------------

   @ 007, 002 BUTTON "&Aumentar" OF oDlg SIZE 40, 12 ;
      ACTION ( nGet++, Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, nGet ) )

   @ 007, 010 BUTTON "&Diminuir" OF oDlg SIZE 40, 12 ;
      ACTION ( nGet--, Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, nGet ) )

   @ 007, 018 BUTTON "&Executar" OF oDlg SIZE 40, 12 ;
      ACTION Executar_Bmp()

   @ 007, 026 BUTTON "&Saida" OF oDlg ;
      ACTION ( oDlg:End ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED

   oDlg:End()

RETURN Nil

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

FUNCTION Executar_Bmp()

   LOCAL I

   FOR I = 1 TO 99999 // (Step By Step... Indo/Aumentando)

      Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, I )

      SysRefresh()

   NEXT I

   SysWait( .1 )

   FOR I = 99999 TO 1 STEP - 1 // (Step By Step... Voltando/Diminuindo)

      Por_Bmp( oBmp1, oBmp2, oBmp3, oBmp4, oBmp5, I )

      SysRefresh()

   NEXT I

RETURN Nil

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

FUNCTION Troca_Bmp( oBmp1, oBmp2, oBmp3, lSinal )

   STATIC nCont := 0

   LOCAL nInc := IIF( lSinal, 1, - 1 )
   LOCAL nCam := IIF( lSinal, - 528, - 527 )
   LOCAL nTopeI := IIF( lSinal, - 576, 0 )
   LOCAL nTopeS := IIF( lSinal, 0, - 576 )

   IF .NOT. lSinal .AND. nCont == 0

      RETURN Nil

   ENDIF

   IF oBmp3:nX == nTopeI
      oBmp3:nX := nTopeS
   ENDIF

   IF oBmp2:nX == nTopeI
      oBmp2:nX := nTopeS
   ENDIF

   IF oBmp1:nX == nTopeI
      oBmp1:nX := nTopeS
   ENDIF

   oBmp3:nX -= nInc
   nCont += nInc

   IF oBmp3:nX <= nCam
      oBmp2:nX -= nInc
      IF oBmp2:nX <= nCam
         oBmp1:nX -= nInc
      ENDIF
   ENDIF

   oBmp3:Refresh( .F. )
   oBmp2:Refresh( .F. )
   oBmp1:Refresh( .F. )

RETURN Nil

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

FUNCTION Por_Bmp ( oBjeto1, oBjeto2, oBjeto3, oBjeto4, oBjeto5, nQuantidade )

   LOCAL cNum := SPACE( 5 )
   LOCAL nLen := 0
   LOCAL nDigito1 := 0
   LOCAL nDigito2 := 0
   LOCAL nDigito3 := 0
   LOCAL nDigito4 := 0
   LOCAL nDigito5 := 0

   cNum := STR( nQuantidade )
   nLen := LEN( cNum )

   nDigito1 := VAL( SUBSTR( cNum, nLen - 4, 1 ) )

   IF nDigito1 = 0
      oBjeto1:nX := - 528 // 0 - (11 * 48)
   ELSE
      oBjeto1:nX := 0 - ( nDigito1 * 48 )
   ENDIF

   nDigito2 := VAL( SUBSTR( cNum, nLen - 3, 1 ) )

   IF nDigito2 = 0 .AND. nDigito1 = 0
      oBjeto2:nX := - 528
   ELSE
      oBjeto2:nX := 0 - ( nDigito2 * 48 )
   ENDIF

   nDigito3 := VAL( SUBSTR( cNum, nLen - 2, 1 ) )

   IF nDigito3 = 0 .AND. nDigito2 = 0 .AND. nDigito1 = 0
      oBjeto3:nX := - 528
   ELSE
      oBjeto3:nX := 0 - ( nDigito3 * 48 )
   ENDIF

   nDigito4 := VAL( SUBSTR( cNum, nLen - 1, 1 ) )

   IF nDigito4 = 0 .AND. nDigito3 = 0 .AND. nDigito2 = 0 .AND. nDigito1 = 0
      oBjeto4:nX := - 528
   ELSE
      oBjeto4:nX := 0 - ( nDigito4 * 48 )
   ENDIF

   nDigito5 := VAL( SUBSTR( cNum, nLen, 1 ) )

   oBjeto5:nX := 0 - ( nDigito5 * 48 )

   oBjeto5:Refresh( .F. )
   oBjeto4:Refresh( .F. )
   oBjeto3:Refresh( .F. )
   oBjeto2:Refresh( .F. )
   oBjeto1:Refresh( .F. )

   SysRefresh()

RETURN Nil
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7852
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 40 guests