Página 2 de 2
Enviado: 02 Set 2007 11:01
por Eolo
Maligno, isso eu sei. O problema é o seguinte: pela dica do Esbasso, eu faço
keysec(254,INT(60),- 1,.t.)
antes dos get e aí, passados os 60 segundos, o READ é terminado.
O que eu quero: se, antes de passados os 60 segundos, o usuário tecla qq coisa, o tempo é reiniciado, ou seja, seria como rodar novamente
keysec(254,INT(60),- 1,.t.) ...
Enviado: 02 Set 2007 12:35
por Hasse
Bom dia Amigos.
Me lembrei que este assunto já havia passado pelo nosso Fórum, e portanto pesquisei, e encontrei...
Este Post não ajuda ou soluciona ?
https://pctoledo.org/forum/viewto ... hlight=mgs
Enviado: 02 Set 2007 12:48
por janio
Eolo escreveu:Sim, no Clipper parece simples... É só trocar o inkee(0) por inkey() e ficar monitorando o tempo. Mas e no XHarbour? Num achei o Getsys...

Se não me engano, no xharbour é o TGETLIST.PRG q faz as vezes do GETSYS do clipper.
Jânio
Enviado: 02 Set 2007 15:38
por Maligno
Eolo escreveu:O que eu quero: se, antes de passados os 60 segundos, o usuário tecla qq coisa, o tempo é reiniciado, ou seja, seria como rodar novamente
keysec(254,INT(60),- 1,.t.) ...
Então você terá que criar um identificador que será testado na função
fechar_get. Agora, como fazer isso é coisa que não sei. Mas está parecendo que ficaria mais "barato" alterar o GETSYS do Xharbour, ou seja lá o nome que ele tiver.

Mas note que você ainda terá o trabalho de descobrir se houve alguma alteração em algum campo da lista.
Enviado: 02 Set 2007 17:09
por Eolo
Achei uma referência à função KEYSEC() que o
ESBASSO postou e ela diz o seguinte: a função inicia um timer que, transcorrido o tempo desejado, manda um (ou mais) key code pro buffer do teclado. Por ex:
Código: Selecionar todos
KEYSEC(27,60,2,.t.)
- 27 = tecla a add no buffer (no caso, ESC)
- 60 = 60 segundos
- 2 = quantas vezes a tecla ESC deverá ser add (no caso, 2)
- .t. = quando .T., o timer é resetado qdo se pressiona alguma tecla; quando .F., não (**VER ABAIXO**).
KEYSEC() -> desativa o timer
Só é necessário se for preciso abortar o timer antes da hora
Fiz uns testes e funciona em (parece que) qualquer situação, seja GET, TBrowse, WAIT etc. Só não entendi direito o funcionamento do último parâmetro: diz que o timer é "resetado" (eu entendo que isto quer dizer voltar a zero) quando se tecla qq coisa com o último parâmetro em .T., mas isso não funciona. Estando ele .T. ou .F., o timer dispara os 2 ESC após os 60 segundos, mesmo se pressionando qualquer tecla... ??
Então, fiz o seguinte:
- nos GETs, como eu uso um VALID FUNCAO() em todos os GETs, coloquei um KEYSEC() e KEYSEC(27,60,2,.t.) no início dessa FUNCAO, aí o timer é resetado quando o usuário passa de um GET pra outro. Se ele ficar paradão em um GET, tchau depois de 60 segundos.
- no TBrowse, incluí um KEYSEC(27,60,2,.t.) na entrada e, a cada tecla pressionada, reseto o timer com KEYSEC() e KEYSEC(27,60,2,.t.). Com isso, se o usuário tecla qq coisa, como um PG DN, ganha 60 segundos. Se ficar paradão, tchau depois de 60 segundos.
Código: Selecionar todos
* GET
var1:=var2:=0
@10,10 get var1 vali funcao()
@12,10 get var2 vali funcao()
read
* etc.
function funcao
KEYSEC()
KEYSEC(27,60,2,.t.)
* validações...
retu .t. // ou .f.
Enviado: 02 Set 2007 17:23
por Eolo
Ah, esqueci de uma coisa: a função KEYSEC() retorna .T. ou .F. se o timer foi ativado ou não...
Maligno, quanto à alteração de algum campo, eu uso a função UPDATED() na saída do READ e funciona 100%. Se qualquer campo foi alterado, ela retorna .T. Aliás, uma exceção: se vc altera qq coisa no primeiro GET e tecla ESC, updated() retorna .F., ele só retorna .T. se vc passar para o próximo GET...
A solução: eu uso uma variável global ALTERA, que guarda .T. ou .F. dependendo do UPDATED(). No começo das rotinas de edição, eu faço ALTERA=.F. e SET KEY 27 TO SCAPE...
Enviado: 02 Set 2007 17:52
por Maligno
Update() pro meu caso não resolve. Mas se serve ao seu propósito, maravilha.

Enviado: 02 Set 2007 18:30
por Eolo
Hasse,
Dei uma olhada no link, mas a solução KEYSEC() é muito mais simples - é só uma linha! - e resolve a parada.
Enviado: 02 Set 2007 19:18
por Hasse
Valeu.
Enviado: 02 Set 2007 20:53
por Hasse
Colegas.
Partindo do princípio que se deseja introduzir uma alteração, como por exemplo, no Keysec.prg ou no Win32prn.prg, como se faz para que ela esteja disponível no xHarbour na hora de compilar ?
Enviado: 03 Set 2007 07:58
por ederxc
:)Pos Essa função veio direto e colou em mim , explendido , matou a charada de tempo do TBrowse()
XH na cabeZZZZZzzzzzzzzzzzzzzza.....
:)Pos
Enviado: 03 Set 2007 08:31
por janio
Hasse escreveu:Colegas.
Partindo do princípio que se deseja introduzir uma alteração, como por exemplo, no Keysec.prg ou no Win32prn.prg, como se faz para que ela esteja disponível no xHarbour na hora de compilar ?
Oxente,
Inclua esses prg's no seu script de compilação
ou
Entre em contato com algum desenvolvedor do xharbour para que ele inclua essa alteração no CVS. Dessa maneira todos se beneficiarão da modificação.
Jânio
GET com temporizador
Enviado: 26 Ago 2018 23:40
por lugab
Obrigado, Esbasse e Eolo,
Problema resolvido