Evitar sair do read com pgdn

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Evitar sair do read com pgdn

Mensagem 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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Evitar sair do read com pgdn

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Evitar sair do read com pgdn

Mensagem 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
Editado pela última vez por Toledo em 16 Nov 2010 08:25, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Evitar sair do read com pgdn

Mensagem 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!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Evitar sair do read com pgdn

Mensagem 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.
[]'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 do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: Evitar sair do read com pgdn

Mensagem 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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Evitar sair do read com pgdn

Mensagem 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.
[]'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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Evitar sair do read com pgdn

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Evitar sair do read com pgdn

Mensagem 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.
[]'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 do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Evitar sair do read com pgdn

Mensagem 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
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Evitar sair do read com pgdn

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: Evitar sair do read com pgdn

Mensagem 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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Evitar sair do read com pgdn

Mensagem 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 ..
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Evitar sair do read com pgdn

Mensagem por JoséQuintas »

Só remover o desvio.

Código: Selecionar todos

SET KEY K_PGDN TO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Evitar sair do read com pgdn

Mensagem 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 !!!
Editado pela última vez por Itamar M. Lins Jr. em 03 Mai 2021 08:40, em um total de 1 vez.
Razão: Mensagem editada para formatação de texto em letras minúsculas. Evite postar mensagens com texto TOTALMENTE EM LETRAS MAIÚSCULAS.<br>Veja as Regras do Fórum:<br>7 - Mensagens em letras MAIÚSCULAS poderão ser editadas sem aviso prévio.
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder