Como actualizar la pantalla leyendo el puerto comm ???
Posted: Tue Aug 21, 2007 12:23 am
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
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