Página 1 de 1
Evitar sair do read com pgdn
Enviado: 15 Nov 2010 17:21
por rubens
Olá.. pessoal pesquisei e não encontrei nada parecido com isso..
Tentei usar SET CONFIRM ON no iníco da Rotina e SET CONFIRM OFF no final e não deu certo... o meu problema tá no final do orçamento, onde tem os campos
SUBTOTAL
DESCONTO
TOTAL
O Total é calculado conforme o desconto digitado, daí se o usuario pressiona pgdn no subtotal ele pula o resto independente dos valid e when que exista nos gets do desconto e subtotal...
Grato...
Rubens
Evitar sair do read com pgdn
Enviado: 15 Nov 2010 19:12
por Pablo César
Rubens, mostre seu código fonte. Não adianta fornecer uma sugestão e não funcionar com o que você tem.
Re: Evitar sair do read com pgdn
Enviado: 15 Nov 2010 21:36
por billy1943
Ignorar a tecla é fácil.
Como sabemos, o valor da tecla "PgDn" quando pressiona retorna o valor 3, e a "PgUp" retorna 18, e assim por diante.
Tente:
Código: Selecionar todos
#include "inkey.ch" // todos os valores de teclas
....
do while .t.
@ y,m say "LLLLLLLLL" get xb
@ y,n say "QQQQQQQQ" get xc
@ x,y say "MMMMMM" get xr
read
nkey := lastkey() // obtem o valor da última tecla
if nkey == K_UP .or. nkey == K_DOWN .or. nkey == K_PGUP .or. nkey == K_PGDN // checa a última tecla
keyboard (chr(nkey))
loop
endif
segue o programa sabendo que as teclas não finalizaram o READ
.....
enddo
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 11:58
por ANDRIL
Se for apenas o PGUP e o PGDN, tente assim:
Código: Selecionar todos
@ y,m say "LLLLLLLLL" get xb valid LastKey()#18.and.Lastkey()#3
@ y,n say "QQQQQQQQ" get xc valid LastKey()#18.and.Lastkey()#3
@ x,y say "MMMMMM" get xr valid LastKey()#18.and.Lastkey()#3
read
Abraços!
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 12:31
por Maligno
Talvez seja mais prático utilizar:
Código: Selecionar todos
#include "inkey.ch"
set key K_PGUP to FctVoid
set key K_PGDN to FctVoid
//
// Código do @...say...get
//
function FctVoid()
return nil
Que pode ser global, inclusive.
Se é que foi isso realmente o que o OP perguntou, porque eu não entendi exatamente qual é o problema. Como ele não se manifestou mais, ficou meio no ar.
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 12:50
por rubens
Vejam o código abaixo...
Código: Selecionar todos
@ 21,05 SAY "CONDICAO PGTO:" GET cCODCOND PICT "@K999" VALID PESQCOND( @cCODCOND ) .AND. !EMPTY(cCODCOND) .AND. MUDAPRECO() WHEN cCODIGO !="000001"
@ 22,47 GET nDESC_P PICT "999.99" VALID CALCPOR( @nDESCONTO )
@ 22,68 GET nDESCONTO PICT P12 VALID CALCVEN( @nTOTAL )
@ 23,68 GET nTOTAL PICT P12 VALID nTOTAL!=0.00 .AND. VERDESC( @nDESC_P, @nTOTAL, @nDESCONTO )
READ
Quando o foco fica no get cCODCOND se o usuário pressionar pgdn sai do read, deixando de ler os outros 03 gets abaixo... daí o nTOTAL fica zerado (0.00), e não executa as funções dentro dos valid e when...
Precisava obrigar o usuário a pressionar enter e passar dentro de cada get...
Rubens
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 13:57
por Maligno
Então parece que o problema realmente está em anular as teclas PgDn e PgUp. Se for isso, então já tem as respostas.
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 14:01
por JoséQuintas
Se for fazer isso em todo sistema, melhor alterar a GETSYS, que controla todos os GETs.
Outra opção seria um READ independente da primeira variável.
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 14:08
por Maligno
Pensei no GETSYS, mas há quem não goste de alterá-lo. Até porque, são apenas duas linhas de código. A solução pelo SET KEY é mais simples e rápida.
Um READ isolado para a primeira variável funcionaria, mas se eventualmente for necessário um retorno a este campo, seria necessário um controle extra, mais trabalhoso.
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 17:19
por ANDRIL
Rubens, o código que eu postei não resolveu???
Faça assim:
Código: Selecionar todos
@ 21,05 SAY "CONDICAO PGTO:" GET cCODCOND PICT "@K999" VALID PESQCOND( @cCODCOND ) .AND. !EMPTY(cCODCOND) .AND. MUDAPRECO() .AND. LASTKEY()#18 .AND. LASTKEY()#3 WHEN cCODIGO !="000001
Aparentemente, acho que as teclas PGUP e PGDN serão bloqueadas. Faça ai o teste e nos de um retorno. Creio que como se trata de uso apenas nesta linha, não há necessidade de uma alteração no GETSYS.
Abraços
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 19:29
por JoséQuintas
Pera lá...
Fiz um teste aqui, e pgdn não abandona o get sem fazer o valid.
Na prática ele pula os outros gets.
Será que seria interessante mexer um pouquinho na lógica?
Algo do tipo....
@ 1, 1 get mvar1 valid CalculaTudo(@mvar1,@mvar2,@mvar3,@mvar4)
@ 2, 1 get mVar2 valid CalculaTudo(@mvar1,@mvar2,@mvar3,@mvar4) When .f.
@ 3, 1 get mVar3 valid CalculaTudo(@mvar1,@mvar2,@mvar3,@mvar4)
@ 4, 1 get mVar4 valid CalculaTudo(@mvar1,@mvar2,@mvar3,@mvar4)
read
Outra coisa:
Se compilar com ou sem o /z, pode ter resultados diferentes.
A otimização de expressões omite parte da lista.
tipo... if condicao1 .and. condicao2
Se estiver otimizado, se condição 1 for falsa, nem executa a condição 2.
Se a função em condicao2 fizer o cálculo, nem vai ser executada.
Re: Evitar sair do read com pgdn
Enviado: 16 Nov 2010 22:14
por rubens
Pessoal seguinte:
O Andril está certo... o exemplo dele funcionou, só que daí teria que colocar a validação em todos os gets, para esse bloco de código não teria problema...
A sugestão do José Quintas, também já tinha pensado, mas até o momento que o cliente escolhe a condição ainda não tinha dados os suficiente para fazer cálculo do desconto em % ou valor.. (pelo menos o que entendi) e desmembrar os gets não daria porque se hora de fechar a venda o cliente optasse por mudar a forma de pagamento, não dava para voltar no read anterior...
A melhor forma de resolver ao meu modo de ver foi o que o Maligno expôs, até aproveitei e crir uma função para habilitar/desabilitar a pgdn e pgup, o que pode ser incrementado para outras teclas...
Valeu pessoal... obrigado a todos...
Rubens
Evitar sair do read com pgdn
Enviado: 02 Mai 2021 17:48
por deividdjs
NO EXEMPLO DO MALIGNO
COMO EU FAÇO PARA ATIVAR NOVAMENTE AS TECLAS QUANDO SAIO DA FUNÇÃO ... PORQUE TESTEI AQUI ELE DESABILITA EM TODO O SISTEMA DEPOIS QUE SAIO DA FUNÇÃO Q UTILIZEI O set key K_PGUP to FctVoid E set key K_PGDN to FctVoid ..
Evitar sair do read com pgdn
Enviado: 02 Mai 2021 17:51
por JoséQuintas
Evitar sair do read com pgdn
Enviado: 03 Mai 2021 08:21
por deividdjs
JoséQuintas escreveu:Só remover o desvio.
Obrigado Jose ... Eu pensei um pouquinho depois q mandei a mensagem e fiz justamente isso .. hehehe estou meio enferrujado .. Voltei a programar em xHarbour novamente... uma aplicação antiga .. .
Forte abraço amigo !!!