Clipper On Line • Ver Tópico - Help MiniGUI
Mudar para estilo Clássico
Projeto MiniGui - Biblioteca visual para Harbour/xHarbour
Postar uma resposta

Help MiniGUI

19 Mai 2013 10:59

Bom dia colegas.

Estou apanhando feito cachorro magro.

Vejam o código abaixo:
Código:
   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:
Código:
            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ódigo:
   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.
Postar uma resposta