pict do get
Moderador: Moderadores
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
pict do get
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
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
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
pict no get
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.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
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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...
Assim com certeza vai... Ele deixa escrever mas não sai do Get...
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.
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.
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
[@!] 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.
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

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
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.
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

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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 ?!
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.
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

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
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.
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.
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.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Veja o codigo abaixo.
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 :?)
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 )
Voce define o tamanho do campo em M->TAMANHO.
@braços :?)

