Estou apanhando feito cachorro magro.
Vejam o código abaixo:
DEFINE WINDOW principal AT 30,1230 WIDTH 200 HEIGHT 80 ;
TITLE "JS600 - COM " + c_Port MAIN ;
ON INIT dados_iniciais( c_Form )
*
@ 12, 15 LABEL label_1 WIDTH 160 HEIGHT 16 ;
VALUE 'COM ' + c_Port + " => INATIVA" ;
FONT 'Times New Roman' SIZE 14
principal.label_1.fontcolor := RED
*
_DefineTimer( "Timer_Abertura", "principal", 2000, { || Ctrl_Read() } )
*
END WINDOW
ACTIVATE Window principal
1)-Preciso que a rotina "Ctrl_Read()" seja acessada a cada 2 segundos. Se o processamento da Porta Serial for interrompido por algum motivo, terÃamos 2 opções:
a)-Informar o problema encontrado e fehar o Aplicativo, ou
b)-Se não houver alguma exceção, tentar novo acesso à rotina "Ctrl_Read()" após 2 segundos.
O problema é que a Função _DefineTimer acima dispara um acesso a cada 2 segundos, e isto não pode acontecer.
Eu tentei usar "ON INIT" mas dá erro de compilação, já que uso esta propriedade para "dados_iniciais" para gerenciar onde o usuário que posicionar a janela na tela.
2)-Também poderÃamos transferir todo o processamento da Porta Serial (leitura e escrita) para uma Procedure ou Funtion, mas também não sei como fazer para sair do Window "principal".
Neste caso, assim que o processamento retornar, o que só acontecerá se houver problemas, deverá informar o motivo e fechar o aplicativo.
3)-Assim que a Porta Serial estiver ATIVA, o LABEL label_1 troca a cor para AZUL. Isto está funcionando com o código abaixo:
Principal.label_1.Value := 'COM ' + c_Port + ' => ATIVA'
Principal.label_1.fontcolor := BLUE
4)-Quando a Porta estiver recebendo dados, a rotina altera o LABEL label_1 para "<<<<<<<<<<<" dinâmico, que também está funcionando com o código abaixo:
c_Label := "REC ____________"
FOR CTD := 14 TO 4 step -1
Principal.label_1.Value := c_Label
Inkey( PRM->PRMTP1 ) // Temporizador.
c_Label = Stuff( c_Label, CTD, 1, "<" )
NEXT CTD
5)-Quando a Porta estiver emitindo dados, invertendo o sinal para ">".
6)-Assim que porta estiver aciosa, ou seja, aberta mas não recebendo e nem emitindo dados, o LABEL label_1 volta ao estado de "ATIVA"
Além da instrução de como contornar o meu problema, também aceito sugestões para tornar o sistema mais simples.