GET com temporizador

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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.) ...
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem 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
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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...

Código: Selecionar todos

function SCAPE
if updated()
  altera=.t.
endi
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Update() pro meu caso não resolve. Mas se serve ao seu propósito, maravilha. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

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
Hasse,
Dei uma olhada no link, mas a solução KEYSEC() é muito mais simples - é só uma linha! - e resolve a parada.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Valeu.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem 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 ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

:)Pos Essa função veio direto e colou em mim , explendido , matou a charada de tempo do TBrowse()


XH na cabeZZZZZzzzzzzzzzzzzzzza.....


:)Pos
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

GET com temporizador

Mensagem por lugab »

Obrigado, Esbasse e Eolo,

Problema resolvido
lugab
Responder