Clipper On Line • Ver Tópico - GET com temporizador

GET com temporizador

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

Moderador: Moderadores

 

GET com temporizador

Mensagempor Eolo » 31 Ago 2007 16:13

Pessoal,

To migrando do Clipper52e pro XHarbour, sem LIB visual, e preciso do que se segue...

Um usuário navega num TBrowse e, sobre o registro X, tecla ENTER para editá-lo. Meu programa então bloqueia o registro e abre os respectivos campos numa outra tela. O usuário altera o que precisar, grava as alterações e, na saída, o registro é UNLOCKado. Aí aí, baba. O problema é o que o usuário "esquece" essa tela aberta e então o arquivo fica "amarrado", até que o usuário saia da edição...

O que eu imagino que preciso: alterar o GETSYS, na parte onde ele captura as teclas pressionadas, trocando o inkey(0) por um inkey() e controlando o tempo dentro do loop: se o usuário não teclar nada por X tempo, o READ é abortado, então UNLOCKo o regisrto e volto o controle pro TBrowse.


Ah, no TBrowse vai ser a mesma coisa, mas isso eu já resolvi: se o usuário deixa a tela aberta, rodando sem necessidade, depois de X tempo (sem que o usuário tecla alguma coisa) ele é encerrado...
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mensagempor Stanis Luksys » 31 Ago 2007 17:48

Opa,

Eu tenho essa alteração no getsys em algum lugar por aqui. Inclusive lembro que ela é abordada no segundo livro da série do Ramalho. O read "temporizado".

Se eu achar eu aviso.

Falou!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Mensagempor Eolo » 31 Ago 2007 21:00

Stanis,
No Clipper, baba, tá na folha. Mas e no Xharbour?

Leonardo,
Dei uma olhada nos arquivos que tu me mandaste mas, putz, não consegui sair do lugar. Eu tentei achar algum inkey(0) no meio deles, pra controlar a coisa a partir daí, mas não achei... Bah, devo estar no caminho errado, tchê!
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mensagempor sygecom » 31 Ago 2007 22:31

Eolo, vice... será que tem que ser pelo read do GETSYS ? quem sabe um WHEN com um valid....será que não ficar 10zzz ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Mensagempor Eolo » 01 Set 2007 17:44

Leonardo, não caiu a ficha aqui... Como uma função chamada pelo VALID vai controlar o tempo? Acho que não saquei. :-(
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mensagempor Maligno » 01 Set 2007 18:03

Ele quis dizer colocar uma função de temporização pra executar em cada WHEN de cada campo. Dá um pouco de trabalho, principalmente se forem muitos campos, mas dá pra modificar o comando GET pra deixar isso embutido.
[]'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 de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Mensagempor Maligno » 01 Set 2007 18:45

De tanto que trabalhei, meus miolos estão meio derretidos. Esquece o que eu disse: por WHEN não dá. Nem por VALID. Teria que alterar o GETSYS, obrigatoriamente.
Se no XHarbour for parecido com o que se tem no Clipper, é só colocar um temporizador na função que chama o aplicador. No Clipper, seria:

// Apply keystrokes until exit
WHILE ( oGet:exitState == GE_NOEXIT )
   GetApplyKey( oGet, inkey( 0 ) )
ENDDO

Seria só trabalhar em cima disso aí. E, claro, alterar o comando READ para aceitar uma configuração de temporização. Mas nem dá tanto trabalho. :)
[]'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 de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Mensagempor Eolo » 01 Set 2007 19:20

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... :-(
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mensagempor Maligno » 01 Set 2007 20:02

Mas e no XHarbour? Num achei o Getsys...

Bom, aí eu passo. :) Não tenho a menor idéia de como seja. Não há algo mais ou menos parecido?
[]'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 de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Mensagempor esbasso » 01 Set 2007 22:22

Eu uso assim no XHARBOUR sem ter de mexer em nada

antes dos get
keysec(254,INT(60),- 1,.t.) && 60 segunods
SET KEY 254 TO Fechar_get

...
..
comandos
..

para desativar no fim

keysec()



FUNCTION fechar_get

IF EMPTY(READVAR())
KEYB CHR(27)
ELSE
KEYB CHR(27)+CHR(27)
ENDIF

RETURN
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
esbasso
Colaborador

Colaborador
 
Mensagens: 325
Data de registro: 24 Jan 2007 16:49
Cidade/Estado: CHAPECO/SC
Curtiu: 0 vez
Mens.Curtidas: 8 vezes

Mensagempor Maligno » 01 Set 2007 22:32

Não conheço essa função, mas imaginava algo mais "enraizado", como por exemplo: READ KILL IN <n> SECS. Mas se sua dica funciona, já é uma ajuda pro colega. :)
[]'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 de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Mensagempor sygecom » 02 Set 2007 02:22

Eolo, o colega esbasso matou a charada com o exemplo que ele postou.
Assim que der vou dar uma olhada no GETSYS.PRG do xharbour...e realmete pelo WHEN não daria...minha idéai era iniciar um contador junto com GET, mas o GET não executa o WHEN enquanto não sair dele !!! :(Neg :(Neg

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Mensagempor Stanis Luksys » 02 Set 2007 03:11

sygecom escreveu:mas o GET não executa o WHEN enquanto não sair dele !!!

Na verdade o WHEN é executado assim que o objeto GET ganha foco, o VALID sim é executado ao sair do GET. De qualquer forma o temporizador não poderia ser aplicado a nenhuma das duas cláusulas, e sim diretamente no tratamento que o comando READ faz a lista de GETs pendentes, que foi o que o colega postou acima.

Note que no exemplo dele, a função é executada de qualquer maneira, e abandona o READ avaliando se os GETs da sua lista de pendência permanecem inalterados. Ou seja, sempre, afinal a gravação ainda não foi executada.


Falou!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Mensagempor Eolo » 02 Set 2007 08:16

Esbasso, essa sua função sempre vai derrubar o READ depois de 60 segundos, independentemente do usuário ter teclado alguma coisa, certo?

Bão, embora seja um tempo razoável, eu gostaria de fazer o mesmo que fiz no TBRowse (ou seja, o tempo ficando ligado à inatividade): na entrada, eu marco o horário e, a cada loop, vejo se já se passaram 60 segundos. Se sim, EXIT. Só que, a cada loop, eu reinicio a "hora de entrada" quando o usuário tecla qq coisa... Por ex, se o cara teclar SETA ACIMA aos 59 segundos, o tempo é reiniciado...

Então, pergunto se isso seria possível no GET:
- se o usuário não digitou nada (em nenhum dos GETs), sai em 60 segundos sem dizer tchau;
- se ele digitou qq coisa mas está inativo há 60 segundos, bota um aviso na tela ("Processo sendo encerrado por inatividade...") e dá 5 segundos pro usuário se manifestar... Se nada for digitado, tchau (mesmo perdendo alterações não salvadas).
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mensagempor Maligno » 02 Set 2007 10:35

Então, pergunto se isso seria possível no GET

Neste caso o problema passa a ser outro. Você precisa identificar se houve ou não alguma alteração. De duas uma: ou você compara seus campos um a um ou você faz como eu, que uso apenas matrizes para armazenar esses campos. Antes do GET, meu GETSYS armazena o CRC32 da matriz toda (convertida pra matriz). Ao sair, ele recalcula e compara com o valor armazenado. Se iguais, sai sem aviso, gravação, etc.
[]'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 de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 12 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro