pict do get

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

pict do get

Mensagem por Glauco Cruz Costa »

Estou com grande dificuldade para fazer com que o meu get só não aceite números, aceitando o restante. Alguém pode me ajudar? Estou usando o Clipper 5.20.
Seria algo assim:
@ 09,06 SAY "MEDICO........:" GET MED PICT (....)
Assim, o que eu coloco após o PICT. Ou existe outra opção?
E, também, precisa que as letras, que por ventura venham a ser digitadas, convertam-se em maiúscula.
Agradeço, desde já.
Glauco
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Caro Glauco,
a picture "A!" aceita somente caracteres alfabéticos e converte os mesmos em maiúsculas.

Para aceitar qualquer tecla, exceto números, o reader deve alterado para validar cada entrada no buffer de edição.


MGS
Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

pict no get

Mensagem por Glauco Cruz Costa »

MARCELOG escreveu:Caro Glauco,
a picture "A!" aceita somente caracteres alfabéticos e converte os mesmos em maiúsculas.

Para aceitar qualquer tecla, exceto números, o reader deve alterado para validar cada entrada no buffer de edição.


MGS
Olá, Marcelo, eu não entendi essa do reader. Mas, eu pelo menos gostaria de poder Digitar um nome com espaço, por exemplo, Antônio Carlos, e a picture A! não aceita esçaço, só letra. Esse é o problema.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Um poquinho trabalhoso, mas da pra fz isso sim, alias no clipper tudo é possível...

Em casos como este, atente para a clausula VALID e não para a PICT, que são apenas formatos pré-defenidos e muitas vezes nos deixa na mão...

Código: Selecionar todos

@ 0, 0 say "Nome:" get cNome valid testaGet( cNome )


********************
function testaGet( cVar )

for i := 1 to  len( alltrim( cVar ) )

   if isDigit( substr( cVar, i, 1 ) )
      return .f.
   endif

next

return .t.

Assim com certeza vai... Ele deixa escrever mas não sai do Get...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Irineu
Usuário Nível 2
Usuário Nível 2
Mensagens: 61
Registrado em: 13 Ago 2003 22:01
Localização: Curitia-PR
Contato:

Mensagem por Irineu »

@ 09,06 SAY "MEDICO........:" GET MED PICT [@!]

Fui
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

[@!] aceita numeros, pelo menos no meu clipper aceita...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Mensagem por Glauco Cruz Costa »

Caro Stanis ,
Não deu certo. Continua saindo errado.
Coloquei:
@ 09,06 SAY "MEDICO.......:" GET MED VALID testaGet( MED )
Coloquei também a função:
function testaGet( cVar )

for i := 1 to len( alltrim( cVar ) )
if isDigit( substr( cVar, i, 1 ) )
return .f.
endif
next
return .t.

Mas, não adiantou. Continuou aceitando tudo. Também tentei, trocando o cVar por MED, mas nada.
Editado pela última vez por Glauco Cruz Costa em 19 Dez 2005 18:54, em um total de 1 vez.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Amigo,

Altere a linha do get q te passei, colocando tbm o PICT junto com o Valid, por exemplo:


@ 0, 0 say "Nome:" get cNome pict "@!" valid testaGet( cNome )


Dessa maneira entra qq caracter que não seja numero, e se for letra é convertida automaticamente para maiusculo.

Ok ?!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Mensagem por Glauco Cruz Costa »

Deu certo. Valeu.
Poderia explicar-me o que faz a função alltrim?
Obrigado.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Código: Selecionar todos

********************
function testaGet( cVar )

for i := 1 to  len( alltrim( cVar ) )
   if isDigit( substr( cVar, i, 1 ) )
      return .f.
   endif
next
return .t.
Passo a passo:

allTrim( cVar ) retorna o conteudo de cVar sem espacos, isso é util pq se vc declarou la em cima algo do tipo "nome := space(30)", e colocou no get "Stanis", o conteudo da variavel será "Stanis______________", certo?


Feito isso a Funcao isDigit() vai verificar se O PRIMEIRO CARACTER do texto é um numero, e por isso a necessecidade de implementar o FOR...NEXT com LEN(), que vai repetir esse procedimento até que se chegue no fim da palavra, sempre extraindo com SUBSTR() a proxima letra que ainda nao foi analisada.

No caso de um caracter ser numero a funcao retorna .F. pro VALID e o cursor nao sai do GET, caso contrario retorna .T. e sai!!


Deu pra entender??


Falou!!!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Veja o codigo abaixo.

Código: Selecionar todos

#define T_BACKSPACE      8
#define T_ENTER         13
#define T_ESC           27

M->SENHA := ""
M->TEC   := 0
M->LINHA := 10
M->COLUNA:= 10
M->TAMANHO:=15
@ M->LINHA, M->COLUNA SAY "["+replicate("-",M->TAMANHO)+"]" // TAMANHO DO CAMPO
FOR M->P_SENHA = M->COLUNA+1 TO M->COLUNA+M->TAMANHO
   M->TEC := INKEY( 0 )
   // So permite A..Z, a..z e espaço
   IF M->TEC = 32 .OR. (M->TEC >= 65 .AND. M->TEC <= 122)
      IF M->TEC = T_BACKSPACE
         IF M->P_SENHA > M->COLUNA+M->TAMANHO // NAO ULTRAPASSA O TAMANHO DO CAMPO
            M->P_SENHA--
            @ M->LINHA, M->P_SENHA SAY "-"
            M->SENHA := SUBS( M->SENHA, 1, LEN( M->SENHA ) - 1 )
         ENDIF
         M->P_SENHA--
      ELSE
         M->SENHA += CHR( M->TEC )
         IF M->TEC = T_ENTER .OR. M->TEC = T_ESC
            EXIT
         ENDIF
         @ M->LINHA, M->P_SENHA SAY CHR(M->TEC)
      ENDIF
   ELSE
      // Qualquer coisa digitada que não esteja no criterio acima sera descartada
      M->P_SENHA--
   ENDIF
NEXT
M->SENHA := UPPER( M->SENHA )
Com este código voce poderá digitar qualquer palavra ou nome e o mesmo nao ira permitir entrada de numeros, somente palavras(minusculas e maiusculas) e espaços.

Voce define o tamanho do campo em M->TAMANHO.

@braços :?)
Responder