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
Só remover o desvio.

Código: Selecionar todos

SET KEY K_PGDN TO

Evitar sair do read com pgdn

Enviado: 03 Mai 2021 08:21
por deividdjs
JoséQuintas escreveu:Só remover o desvio.

Código: Selecionar todos

SET KEY K_PGDN TO
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 !!!