Página 1 de 1

pict do get

Enviado: 15 Dez 2005 22:12
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

Enviado: 16 Dez 2005 08:13
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

pict no get

Enviado: 16 Dez 2005 14:09
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.

Enviado: 18 Dez 2005 15:52
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...

Enviado: 18 Dez 2005 16:45
por Irineu
@ 09,06 SAY "MEDICO........:" GET MED PICT [@!]

Fui

Enviado: 18 Dez 2005 17:02
por Stanis Luksys
[@!] aceita numeros, pelo menos no meu clipper aceita...

Enviado: 19 Dez 2005 18:40
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.

Enviado: 19 Dez 2005 18:53
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 ?!

Enviado: 19 Dez 2005 19:07
por Glauco Cruz Costa
Deu certo. Valeu.
Poderia explicar-me o que faz a função alltrim?
Obrigado.

Enviado: 19 Dez 2005 20:45
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!!!

Enviado: 20 Dez 2005 00:00
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 :?)