Página 1 de 1

Função READEXIT

Enviado: 11 Jan 2011 22:26
por billy1943
Eu tenho usado em meus sistemas muitas vezes a função READEXIT, para permitir avançar ou retroceder em uma entrada de dados, e, em muitas rotinas ela funcionou legal.

Agora em um sistema mais recente se teclar SETA PARA CIMA ou SETA PARA BAIXO, o programa as "ignora".

Exemplo simplificado da rotina:
Eu uso matrizes para gravar os seguintes dados, cada uma delas com 100 elementos:
anbco = número dos Bancos
ancheque = número do cheque
adpres = data de apresentação dos cheques
anvalor = valor do cheque
***************************************************
readexit(.t.)
set escape off

do while .t.

@ lin, 6 get anbco pict "999" valid anbco > 0
read

if lastkey() == 24 // rolamento para baixo

i ++

if i > 100
@ 24,0
@ 24,0 say "Limite máximo = 100 cheques"
i --
loop
endif // fim i > 100

if anbco[i-1] == 0
i --
loop
endif // fim anbco[i-1] == 0

lin ++

if lin > 17
lin := 17
scroll(6,6,17,41,1)
endif // fim lin > 17

@ lin,12 get ancheque pict "999999"
@ lin,21 get adapres
@ lin,31 get anvalor pict "@E ###,###.##"
@ lin,42 say i pict "999" color "gr+/b"
clear gets
loop

endif // fim rolamento para baixo

if lastkey() == 05 // rolamento para cima

i --

if i < 1
@ 24,0
@ 24,0 say "J  chegou ao primeiro cheque"
i ++
loop
endif // fim i < 1

lin --

if lin < 6
lin := 6
scroll(6,6,17,41,-1)
endif // fim lin < 6

@ lin,12 get ancheque pict "999999"
@ lin,21 get adapres
@ lin,31 get anvalor pict "@E ###,###.##"
@ lin,42 say i pict "999" color "gr+/b"
clear gets
loop

endif // fim rolamento para cima

....

***********************************************
O que pode causar que o sistema ignore as teclas Seta para cima e Seta para Baixo no READ em questão ?

Função READEXIT

Enviado: 11 Jan 2011 22:35
por Pablo César
Não lembro agora o por quê eu não edito elementos de matrizes ou vetores de dentro de um @ GET...

Não conseguí entender muito a necessidade de sair do GET... mas sugiro utilizar TBROWSE de matriz, talvez seja bem mais simples mais seguro e mais estético quanto a apresentação dos dados na tela. A exibição do TBROWSE pode ser acionada por uma tecla de função.

Re: Função READEXIT

Enviado: 12 Jan 2011 08:31
por ANDRIL
Amigo, muito provavel que o seu valid esta anulando a função READEXIT, pois o valid impõe uma condição, se vc preencher o valor com um numero e apertar seta para cima/baixo deve funcionar, agora se tiver zerado nao.

Retire o valid e coloque a condição em IF. Veja

Código: Selecionar todos

@ lin, 6 get anbco[i] pict "999" 
read
if anbco[i]<=0 
loop
endif
*-- aqui segue normal o seu codigo de IFs.
Abraços.

Re: Função READEXIT

Enviado: 13 Jan 2011 21:15
por billy1943
O nosso colega Andril "matou" a charada.

Realmente, era o valid que perdia o valor de lastkey(), e bastou mudar de lugar para dar certo.

Obrigado.