problema com a keysec() no Harbour

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

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

problema com a keysec() no Harbour

Mensagem por Jairo Maia »

Olá Inácio,

Na verdade coloquei o TypeaHead apenas para garantir que o alert() fosse exibido, já que o evento do teclado está sendo capturado pela variável nTecla2, que está antes dele. Teoricamente após 20 segundos deveria aparecer a tecla 27 (Esc). Muito estranho.

Confesso que não tenho nenhuma ideia...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Entendi.

Mas será que teria mesmo que retornar o 27?

Ao dar enter, ele entra na responde2() e já toma a ntecla2=13. Daí entra no alert e não sai enquanto eu não der outro enter.

Daí eu testei sem o alert. Substitui por

Código: Selecionar todos

?ntecla2
Só que ainda assim não funciona. Com o clear typeahead, na primeira vez retorna 13, depois apenas 0, sempre. Sem ele, ele retorna sempre 13.

Isso significa que o keysec não está funcionando, estou certo? Por que será?
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

problema com a keysec() no Harbour

Mensagem por cjp »

Resolvi o meu problema criando um atalho: coloquei uma variável pública numérica antes de chamar a função responde2(), coloquei um ++ nela no início da responde2() e um

Código: Selecionar todos

if variável>90000
return(0)
endif
Resolveu. Mas sei que não é a solução ideal.

De qualquer forma, obrigado a todos que ajudaram.
Inacio de Carvalho Neto
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

problema com a keysec() no Harbour

Mensagem por lugab »

Amigos, eu uso o Habour 3.0 (modo console)

O Eolo me instruiu q o comando " keysec(27,10,,.T.) " retorna para Lastkey() o código 27, após 10 segundos de inatividade no teclado, Com ele funciona bonitinho, mas isso não está acontecendo com meu programa.

E pra piorar, apesar do "Clear TypeHead" no início do código, na primeira execucao o laskey() já desce preenchido com 13 (enter)

Código: Selecionar todos

Tk=0
*------------
Do Whil .T.
*-----------
   Op0=0
   Clear Typeahead 
   @ 5,3 clea to 22,78
   @ 06,23 to 16,52 double
   @ 06,23 to 08,52 double  
   @ 07,25 SAY "     Entradas"   
   
   @ 09,25 prom "1 - Notas Fiscais"
   @ 10,25 prom "2 - Outras Entradas"
   @ 11,25 prom "3 - Pedidos"   
   @ 12,25 prom "4 - Tela De Custos"   
   @ 13,25 prom "5 - Series "
   @ 14,25 prom "6 - Itens abaixo da media"
   @ 15,25 prom "9 - fim"   

   keysec(27,10,,.T.)
   Tk=lastkey()
   if Tk=27
      Alert("Programa encerrado por inatividade.....",,,,,1) 
      tela()
      retu
   endif  
      
   Menu to Op0   
   Do Case
      Case Op0=7
          retu
      Case op0=6
          do rot001
   endcase
enddo      
Eu experimentei a sugestão do Jairo, mas a linha

Código: Selecionar todos

My_keysec(27,10,1,.T.)
Retorna 27 sempre, mesmo que eu tecle algum número antes de 10 segundos


A minha intenção é limitar qm 10s o tempo de espera pra q alguma opção seja escolhida no Menu. O q vcs sugerem ???
lugab
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

problema com a keysec() no Harbour

Mensagem por Eolo »

Lugab,

1. nunca consegui entender direito nem usar o CLEA TYPE.
O que eu faço (e funciona) é forçar o lastkey() a retornar 0:

Código: Selecionar todos

keyb chr(0)
inkey() // descarrega o buffer
? lastkey() -> 0
2. quando vc tecla ESC, na execução do MENU TO, a variável sai com 0. Então:

Código: Selecionar todos

* ...
keysec(27,10,,.T.)
menu to cho
if cho=0
  retu // usuario teclou ESC ou a KEYSEC() derrubou ele
elseif cho=1
  * faz isso
elseif cho=2
  * etc
endi
Será que a sua mensagem "Programa encerrado por inatividade" não tá sobrando, não?
Se o programa está inativo é porque não tem ninguém usando, então quem vai ver a mensagem?
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

problema com a keysec() no Harbour

Mensagem por lugab »

Eita.... é agora q esse topicão chega ao fim, pq o Eolo matou a charada...

Então, geral, em vez de usarem "Clea Typeahead", troquem por "keyb chr(0)" que ai o "KeySec()" funciona. Comigo mesmo, funcionou.

Muito Obrigado, Eolo :{
lugab
Responder