Sr. Antonio,
percebi um comportamento diferente do METHOD:
METHOD CommNotify( nDevice, nStatus ) CLASS TWindow
Ao ler um c贸digo de barras por um leitor serial, parece que o methodo esta chamando dois EVENTOS e n茫o um como nas vers玫es anteriores.
(FONTE1) Exemplo de c贸digo com problema:
(FONTE2) Exemplo de c贸digo adaptado para poder funcionar corretamente:
Quando CheckSerial() 茅 chamado da BCOMMNOTIFY(FONTE1) parece que dois eventos s茫o disparados.
Quando CheckSerial() 茅 chamado diretamente(FONTE2) apenas um evento 茅 disparado.
percebi um comportamento diferente do METHOD:
METHOD CommNotify( nDevice, nStatus ) CLASS TWindow
Ao ler um c贸digo de barras por um leitor serial, parece que o methodo esta chamando dois EVENTOS e n茫o um como nas vers玫es anteriores.
(FONTE1) Exemplo de c贸digo com problema:
#include "FiveWin.ch"
static oWnd, nCom
//----------------------------------------------------------------------------//
function Main()
DEFINE WINDOW oWnd TITLE "Serial Test"
ACTIVATE WINDOW oWnd maximized on init(Serial())
IF nCom >= 0; CLOSECOMM( nCom ); ENDIF
return nil
//----------------------------------------------------------------------------//
static function CheckSerial()
local cRetorno:=space(200), nBytesRead
FlushComm( nCom, 0 )
SysWait( 0.4 )
nBytesRead := ReadComm( nCom, @cRetorno )
? cRetorno
return nil
/**********************************************************/
static function Serial()
LOCAL cDcb
BEGIN SEQUENCE
nCom := OPENCOMM( "COM1", 16384, 16384 )
IF nCom < 0
BREAK
ENDIF
BUILDCOMMDCB( "COM1:9600,N,8,1", @cDcb )
IF !SETCOMMSTATE( nCom, cDcb )
BREAK
ENDIF
EnableCommNotification( nCom, oWnd:hWnd, 1, -1 )
oWnd:bCommNotify = { | nCom | CheckSerial()}
RECOVER
nCom = -1
END SEQUENCE
RETURN
(FONTE2) Exemplo de c贸digo adaptado para poder funcionar corretamente:
#include "FiveWin.ch"
static oWnd, oTmr, nCom
//----------------------------------------------------------------------------//
function Main()
DEFINE WINDOW oWnd TITLE "Serial Test"
DEFINE TIMER oTmr INTERVAL 1000 ACTION CheckSerial() OF oWnd
ACTIVATE WINDOW oWnd maximized on init(oTmr:Deactivate(),Serial())
IF nCom >= 0; CLOSECOMM( nCom ); ENDIF
return nil
//----------------------------------------------------------------------------//
static function CheckSerial()
local cRetorno:=space(200), nBytesRead
oTmr:DEACTIVATE()
FlushComm( nCom, 0 )
SysWait( 0.4 )
nBytesRead := ReadComm( nCom, @cRetorno )
? cRetorno
return nil
/**********************************************************/
static function Serial()
LOCAL cDcb
BEGIN SEQUENCE
nCom := OPENCOMM( "COM1", 16384, 16384 )
IF nCom < 0
BREAK
ENDIF
BUILDCOMMDCB( "COM1:9600,N,8,1", @cDcb )
IF !SETCOMMSTATE( nCom, cDcb )
BREAK
ENDIF
EnableCommNotification( nCom, oWnd:hWnd, 1, -1 )
oWnd:bCommNotify = { | nCom | otmr:activate() }
RECOVER
nCom = -1
END SEQUENCE
RETURN
Quando CheckSerial() 茅 chamado da BCOMMNOTIFY(FONTE1) parece que dois eventos s茫o disparados.
Quando CheckSerial() 茅 chamado diretamente(FONTE2) apenas um evento 茅 disparado.