GET com temporizador
Moderador: Moderadores
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.) ...
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
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
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)
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)
Se não me engano, no xharbour é o TGETLIST.PRG q faz as vezes do GETSYS do clipper.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...
Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
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.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.) ...
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!
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!
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:
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
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 horaEntã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.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...
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.
endiUpdate() 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!
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!
Hasse,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
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
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)
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
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 ?
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)
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)
Oxente,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 ?
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
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql

