GET: como limpar ainda nele

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Acéfalo Dias
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 08 Abr 2010 22:14
Localização: Brazil

GET: como limpar ainda nele

Mensagem por Acéfalo Dias »

ei colegas!!!

ao retornar de um VALID numa rotina de critica à um dado inserido, como fazer para deixá-lo limpinho para uma nova inserção?

valeu! :D
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: GET: como limpar ainda nele

Mensagem por ANDRIL »

Resumindo... Nesta função caso a palavra digitada não seja ANDRIL, apaga o que havia sido digitado e permanece no GET.

Código: Selecionar todos

nome=space(20)
@00,00 get nome pict "@!" valid validar(nome)=.t.
read

function validar(par1)
*--pegue a variavel em questao atraves de readvar()
var=readvar()

if !"ANDRIL"$par1
  &var=space(len(par1))
  return .f.
endif
return .t.
Ate+,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: GET: como limpar ainda nele

Mensagem por gvc »

Código: Selecionar todos

nome=space(20)
@00,00 get nome pict "@!" valid validar(nome) // =.t. Não é necessário comparar uma função que retorna valor lógico
read
Original

Contains a value of any data type that is a copy of the value in the
Get variable at the time the Get object acquired input focus. This
value implements the Get:Undo message. Get:Original is meaningful
only while the Get has input focus. At all other times, it contains
NIL.

cTempVar := cOriginalVar := oGet:Original
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Acéfalo Dias
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 08 Abr 2010 22:14
Localização: Brazil

Re: GET: como limpar ainda nele

Mensagem por Acéfalo Dias »

ei ANDRIL!!!

você abordou exatamente o que eu queria saber, puxa!
grato a todos! :)Pos
Acéfalo Dias
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 08 Abr 2010 22:14
Localização: Brazil

Re: GET: como limpar ainda nele

Mensagem por Acéfalo Dias »

ei colegas!!!

estou tendo dificuldade para aplicar em alguns casos. como ficaria considerando esta alteração...

Código: Selecionar todos

LOCAL cCpf:=Space(14), cRG:=Space(12), cTel:=Space(10)
---------------------------------------------------------------------------------
@00,00 GET cCpf    PICT "999.999.999-99"        VALID validar(cCpf)
@01,00 GET cRG     PICT "99-999.999"            VALID validar(cRG)
@02,00 GET cTel    PICT "@R (99)9999-9999"      VALID validar(cTel)
...
explicando melhor... estes dados fazem parte das opções de pesquisa posterior (possuem seus índices) e a rotina de INCLUSÃO prevê as seguintes ações do usuário e respectivas reações:

a) preencheu corretamente o GET, a rotina criticou duplicidade e o dado não esta cadastrado: .T.
b) preencheu .... ....e há duplicidade: .F. (retorna ao GET sem limpar)
c) deixou em branco porque não sabe os dados ainda: .T.
b) escreveu bobiça ou tava com preguiça e acha que pode deixar incompleto: .F. (retorna ao GET, deixa-o limpinho e brioso estalando de novo: Space(14) no caso da cCpf).

valeu di novo!!! :*
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á

GET: como limpar ainda nele

Mensagem por Pablo César »

É bom você mostrar as regras que você considerou, servem de guia. Só para complementar... mais uma idéia. Quando eu tenho necessidade de limpar o campo vigente através de função de validação ou até mesmo condicional (uso do when), na função validadora, coloco no final keyboard chr(1)+chr(25) para campos tipo texto que simulam o Home + Ctrl Y para apagar conteúdo.
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
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: GET: como limpar ainda nele

Mensagem por ANDRIL »

No seu caso, basta usar a validação que te passei no final da sua rotina de critica.

Código: Selecionar todos

function validar(par1)
*--pegue a variavel em questao atraves de readvar()
var=readvar()
//c) deixou em branco porque não sabe os dados ainda: .T.
if empty(par1)=.t.
   return .t.
endif

//a) preencheu corretamente o GET, a rotina criticou duplicidade e o dado não //esta cadastrado: .T.
seek par1
if found()
   return .t.
else
//b) preencheu .... ....e há duplicidade: .F. (retorna ao GET sem limpar)
   return .f.
endif

//b) escreveu bobiça ou tava com preguiça e acha que pode deixar incompleto: .F. (retorna ao GET, deixa-o limpinho e brioso estalando de novo: Space(14) no caso da cCpf).
***aqui vc pode ate tirar o if porque se chegou ate aqui é pq as consideracoes acima nao foram executadas e retorna o GET limpo


//if !"ANDRIL"$par1
  &var=space(len(par1))
  return .f.
//endif
//return .t.
Entendi isso, se nao for, desculpe-me!

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: GET: como limpar ainda nele

Mensagem por alxsts »

Olá!

Apesar dos exemplos já postados, segue outro.
Estou tratando apenas o campo CPF, para exemplo. Note a forma como recebo o campo: caracter, com máscara de CPF (PICT "@R 999.999.999-99" ) mas sem armazenar no campo (nem no DBF) a pontuação. Sugiro que você faça assim também, inclusive nos outros campos.
Outra boa prática é manter campos separados no DBF para o DDD e o número do telefone.

Código: Selecionar todos

#include "Common.CH"
#include "Inkey.CH"

   LOCAL cCpf:=Space(11), cRG:=Space(12), cTel:=Space(10), GetList := {}

   CLS

   WHILE LastKey() != K_ESC

      @10,10 GET cCpf    PICT "@R 999.999.999-99"  ;
           VALID { |oGet| Validar( oGet, .T. ) }
      @11,10 GET cRG     PICT "99-999.999"            VALID validar(cRG)
      @12,10 GET cTel    PICT "@R (99)9999-9999"      VALID validar(cTel)

      READ

   ENDDO

   RETURN
//------------------------------------------------------------------------------
Function validar( oGet, lShowMessage )

   // Alexandre Santos - 27/06/2007 - 12:13

   Local numero := oGet:varget(), parcial, soma, i, lRet := .F.

   DEFAULT lShowMessage TO .F.

   BEGIN SEQUENCE
      If (ValType(numero) == "C") .And. (Len( AllTrim( numero) ) == 11)

         For i:= 1 To 11
             // aceitar apenas numeros
            If (Asc(SubStr(numero, i, 1)) > 57 .OR. Asc(SubStr(numero, i, ;
               1)) < 48)

               Break

            EndIf
         Next

         parcial:= SubStr(numero, 1, 9)

         soma:= 0

         For i:= 1 To Len(parcial)
            soma:= Val(SubStr(numero, i, 1)) * (11 - i) + soma
         Next

         If (11 - soma % 11 > 9)
            parcial:= parcial + "0"
         Else
            parcial:= parcial + SubStr(alltrim(Str(11 - soma % 11)), 1, 1)
         EndIf

         soma:= 0

         For i:= 1 To Len(parcial)
            soma:= Val(SubStr(numero, i, 1)) * (12 - i) + soma
         Next

         If (11 - soma % 11 > 9)
            parcial:= parcial + "0"
         Else
            parcial:= parcial + SubStr(alltrim(Str(11 - soma % 11)), 1, 1)
         EndIf

         lRet := Parcial == numero

      Endif
   END SEQUENCE

   If ! lRet
      If lShowMessage
         Alert( "CPF Inv lido." )
      Endif
      oGet:undo()     // =================== desfaz a digitação
   Endif

   Return lRet
//------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Responder