Página 1 de 1

tbrowse: sair automático após um tempo

Enviado: 15 Nov 2021 00:32
por cjp
Não sei se dá pra tratar disso neste mesmo tópico, ou se seria melhor abrir um novo.
A questão é a seguinte: neste mesmo tbrowse(), não sei porquê, não está funcionando a keysec().
Estou chamando na rotina principal do browse:

Código: Selecionar todos

keysec(27,55,-1,.t.)
A intenção é que ele feche o browse após determinado tempo, como se o usuário teclasse ESC.
O que eu estou fazendo errado? Por que não está funcionando?

tbrowse: atualização da tela

Enviado: 15 Nov 2021 03:00
por Jairo Maia
cjp escreveu:O que eu estou fazendo errado? Por que não está funcionando?
A Sintaxe está errada. Veja a sintaxe:

Código: Selecionar todos

Keysec( <nKey>, <nTime>, [<nCounter>], [<lMode>] )
nKey = Espeficação numérica da tecla a ser colocada no buffer. As constantes definidas em "inkey.ch" são usadas por KeySec()

nTime = Especificação numérica do tempo de espera para colocar a tecla nKey no buffer. Se for especificado número positivo o tempo será em segundos, se for número negativo, o tempo será na proporção de 1/18.2 segundos.

nCounter = Número de vezes que será colocado a tecla no buffer. Por padrão é 1 vez.

lMode = Se for especificado .T., o tempo é reiniciado após teclar alguma tecla. O padrão é .F., e não reinicia o tempo, a tecla será colocada no buffer teclando ou não algo.

No seu caso, para que ESC seja colocado no buffer após 55 segundos de inoperância, seria:

Código: Selecionar todos

KeySec( 27, 55, 1, .T. )

tbrowse: atualização da tela

Enviado: 15 Nov 2021 09:18
por cjp
Mudei para 1, mas mesmo assim não está funcionando.
Estranho é que uso a keysec() com -1 em outros trechos do meu sistema e funciona.

tbrowse: atualização da tela

Enviado: 15 Nov 2021 09:55
por Jairo Maia
Seu TBrowse está configurado para fazer refresh automático? Para efeito de teste, mude em KeySec() o .T. por .F. para saber se vai funcionar.

tbrowse: atualização da tela

Enviado: 15 Nov 2021 15:49
por cjp
Seu TBrowse está configurado para fazer refresh automático?
Na verdade não sei como fazer isso.
Para efeito de teste, mude em KeySec() o .T. por .F. para saber se vai funcionar.
Mudei, mas continuou não funcionando.

tbrowse: atualização da tela

Enviado: 19 Nov 2021 06:36
por Jairo Maia
cjp escreveu:Mudei, mas continuou não funcionando.
Olá Inácio, então claramente você a colocou em algum lugar em seu TBrowse que ela não está sendo chamada. Para saber mais, somente vendo seu fonte. Verifique se ela está sendo acionada, use o recurso de fazer paradas com hb_Alert("1") hb_alert("2"), etc...

tbrowse: atualização da tela

Enviado: 19 Nov 2021 11:15
por JoséQuintas
A rotina de tbrowse tem um inkey(0)

Código: Selecionar todos

nKey := Inkey(0)
Altere pra isto:

Código: Selecionar todos

nKey := Inkey(600)
IF nKey == 0
   nKey := K_ESC
ENDIF
Pronto. Se em 10 minutos o usuário não teclar nada, sai do inkey e entra o ESC.

tbrowse: atualização da tela

Enviado: 19 Nov 2021 11:18
por JoséQuintas
Ou até melhor:

Código: Selecionar todos

nKey := Inkey(600)
IF nKey == 0
   KEYBOARD Chr( K_ESC )
   nKey := Inkey(0)
ENDIF
Desse jeito, se existir teste de LastKey() também já fica resolvido.

tbrowse: atualização da tela

Enviado: 19 Nov 2021 15:32
por cjp
Perfeito. Resolvido. Muito obrigado.