Page 1 of 1

Como actualizar la pantalla leyendo el puerto comm ???

Posted: Tue Aug 21, 2007 12:23 am
by gabo
Hola sigo con la lectura de los puertos comm.. estoy utilizando un reloj-lector de huella digital.. que usa el puerto usb y un controlador para accesarlo atravez de un puerto comm.. la lectura de los datos y acceso al lector todo bien.. pero.. quiero pintar una barra de progreso cada vez que me lee el puerto pero la app se queda congelada.. aguien ha hecho algo parecido que me un tip.. pongo codigo de lectura del puerto.. Saludos

Code: Select all

/*----------------------------------------------------------------------------------------------------*/
STATIC FUNCTION ReadBufferComm( oLector, oBarra )
  LOCAL oDlg, oLbx
  LOCAL hDatos, nBytes, cBuffer, cLinea, aRecords, nRecCount
  LOCAL lPrimeraVez, cBuffTemp, nPos

  hDatos:= OutChr( "("+ oLector:ps_NOSERIE + ",kqdata)"  )

  cBuffer:= ""
  nBytes := 200
  cLinea := ""
  aRecords:= {}
  lPrimeraVez:= .T.

  DO WHILE .T.
     nBytes := InbufSize()
     cBuffer:= InChr( nBytes )
     IF At( "kqdata,ok", cBuffer ) > 0
        IF lPrimeraVez
           cBuffTemp:= cBuffer
           cBuffTemp:= SubStr( cBuffTemp, 1, 22 )
           nRecCount:= Val( SubStr( cBuffTemp, 16, 6 ) )
           lPrimeraVez:= .F.
           oBarra:SetRange( 1, nRecCount )
        ENDIF
     ENDIF
     IF At( "kqdataend,ok", cBuffer ) > 0
        IF Len( AllTrim( cBuffer ) ) > 0
           cLinea+= BufferClean( cBuffer )
           aRecords:= str2a ( cLinea, CRLF )
           oBarra:SetPos( Len( aRecords ) ) // Aqui se supone que actualiza la barra de progreso
           SysRefresh()
        ENDIF
        EXIT
     ELSE
        IF Len( AllTrim( cBuffer ) ) > 0
           cLinea+= BufferClean( cBuffer )
           aRecords:= str2a ( cLinea, CRLF )
           oBarra:SetPos( Len( aRecords ) )
           SysRefresh()
        ENDIF

     ENDIF
     SysRefresh()
     cBuffer:= ""
  ENDDO

  RETURN NIL
Saludos