Página 1 de 4
Função para Getar senha
Enviado: 07 Out 2007 21:20
por clodoaldomonteiro
Olá amigos!
Algém tem uma função para getar senha, ou uma mascara que esconda o que está sendo digitado pelo operador.
Valeu.
Enviado: 07 Out 2007 22:09
por Stanis Luksys
Código: Selecionar todos
/********** * * * * *
* GETSEN(P1)
* Nao se sabe a autoria...
*/
PROCEDURE GETSEN(P1)
LOCAL L2, L3, L4
IF GETPREVALIDATE(P1) // NOME COMPLETO
P1:SETFOCUS()
P1:CARGO := ""
DO WHILE P1:EXITSTATE() == 0
IF P1:TYPEOUT()
P1:EXITSTATE := 5
ENDIF
DO WHILE P1:EXITSTATE() == 0
L2 := INKEY(0)
IF L2 >= 32 .AND. L2 <= 255
P1:CARGO := P1:CARGO() + CHR(L2)
GetApplyKey(P1, 42) // NOME COMPLETO
ELSEIF L2 = 8
P1:CARGO := SUBSTR(P1:CARGO(), 1, LEN(P1:CARGO()) - 1)
GetApplyKey(P1, L2) // NOME COMPLETO
ELSEIF L2 = 13 // Sai com tecla ENTER e retorna a
// senha digitada
GetApplyKey(P1, L2) // NOME COMPLETO
ELSEIF L2 = 27 // Sai com Tecla ESC e retorna vazio
GetApplyKey(P1, L2) // NOME COMPLETO
ENDIF
ENDDO
IF .NOT. GETPOSTVALIDATE(P1) // NOME COMPLETO
P1:EXITSTATE := 0
ENDIF
ENDDO
P1:KILLFOCUS()
ENDIF
IF P1:EXITSTATE() <> 7
P1:VARPUT(P1:CARGO())
ENDIF
RETURN
E para usa-la:
Código: Selecionar todos
@ 12, 24 say "Usuario:" get cUser pict "@!"
@ 14, 24 say "Senha: " get cSenha
ATAIL(GETLIST):READER := {|BL1|GETSEN(BL1)}
read
Espero que ajude...
Enviado: 08 Out 2007 12:05
por sygecom
Código: Selecionar todos
************
FUNC LESENHA
************
aSENHA := savenv( 00, 00, 25, 79 )
SET CURSOR ON
SELE 32
USE DADOS alias NEW_DAD READONLY
PUBLIC vVALIDA
vVALIDA="N"
SELE NEW_DAD
vSEN=SENHAVALE
vSEN1=STR(vSEN)
SETCOLOR( "N*/W,W+/BG" )
aWin := Win( 10, 18, 14, 60, "Senha Especial !", WT_VERDE2BRANCO,WD_VERDE2BRANCO)
@ 12,23 say "Favor Informar a Senha ->"
SET CONFIRM OFF
IF Pegasenha(6,vSEN1)
vVALIDA="S"
ELSE
MsgINFO("Senha Especial Incorreta !!!, Favor Verificar","Aviso do Sistema")
RSTENV(aSENHA)
RETURN
ENDIF
IF LASTKEY()==27
RSTENV(aSENHA)
RETURN
ENDIF
SET CONFIRM ON
RSTENV(aSENHA)
RETURN
* -----------------------------------------------------------------------------
Func pegasenha(tamanho,senhaok)
* -----------------------------------------------------------------------------
local ok := .f.
@ 12,48 say ''
xsenha = KEYINPUT(tamanho,.f.,.f.,'r/w')
return( uppe(xsenha)=uppe(senhaok) )
* -----------------------------------------------------------------------------
FUNC keyinput()
* -----------------------------------------------------------------------------
param p_numchars,p_upcase,p_echochar,p_cor
private f_str, f_i, f_key, f_c, f_mrow, f_mcol
p_numchars = iif (type ('p_numchars') = 'N', p_numchars, 80)
p_upcase = iif (type ('p_upcase') = 'L', p_upcase, .f.)
p_echochar = iif (type ('p_echochar') = 'L', p_echochar, .t.)
p_cor = iif (type ('p_cor') = 'C', p_cor,setcolor())
oldcor := setcolor()
f_str = ''
f_i = 1
setcolor(p_cor)
do while f_i <= p_numchars
f_key = inkey (0)
IF f_key > 31 .and. f_key < 127
f_c = iif (p_upcase, upper (chr (f_key)), chr (f_key))
f_str = f_str + f_c
f_i = f_i + 1
?? iif (p_echochar, f_c, '*')
ELSEIF f_key = 8 .and. f_i > 1
f_mrow = iif (col () = 0, row () - 1, row ())
f_mcol = iif (col () = 0, 79, col () - 1)
@ f_mrow, f_mcol say ' '
@ f_mrow, f_mcol say ''
f_i = f_i - 1
f_str = iif (f_i = 1, '', substr (f_str, 1, f_i - 1))
ELSEIF f_key = 13
exit
ELSEIF f_key = 27
f_str = ''
exit
ENDIF
enddo
setcolor(oldcor)
return f_str
Obs: eu usava junto com a VL do clipper....para quem quiser é só tirar as funçoes da VL.
Enviado: 08 Out 2007 13:11
por Stanis Luksys
Opa,
Legal ter outra opção, mas acredito que a primeira seja mais válida, visto que trata o conteúdo diretamente pela lista de GETs...
Nem fui eu quem escrevi a função, baixei ha muito tempo na net, mas é muito bem eleborada.
Valeu!
Enviado: 08 Out 2007 13:18
por Maligno
Sem falar que é perfeitamente possível existir a necessidade de um campo de uma lista GET ser do tipo senha. Esta função já não possibilita isso. Aliás, normalmente, log-in inclui um nome, que demandaria um GET. Se no campo de senha, você não teria como corrigir um eventual erro no nome apenas voltando ao campo do nome. Fica um sistema sem coesão. Por isso voto na primeira também.
Enviado: 08 Out 2007 13:25
por sygecom
É apenas uma outra opção....não post para comprar uma com a outra...nem para ser votada !!! apenas é um exemplo.
Enviado: 08 Out 2007 16:09
por Maligno
apenas é um exemplo.
Claro. E todo exemplo é sempre bem-vindo. Mas acredito que temos liberdade para apontar os prós e contras de cada método. Ou não temos?
Enviado: 08 Out 2007 16:20
por sygecom
Claro, que tem...assim como eu fiz na WAPI agora mesmo !!!
Enviado: 08 Out 2007 16:27
por Maligno
Eu vi e já respondi. Obrigado.
Enviado: 09 Out 2007 00:04
por clodoaldomonteiro
Valeu mesmo!
A ajuda foi muito boa e fiquei com a primeira mesmo.
Muito obrigado Stanis, e a todos também.
Con isso a minha rotina de enviar e-mail ficou completa.
Enviado: 09 Out 2007 15:08
por ANDRIL
Se no campo de senha, você não teria como corrigir um eventual erro no nome apenas voltando ao campo do nome
Do jeito que esta nao se pode mudar do get da senha p/ outros gets, pelo menos tentei e nao consegui.
De qualquer forma é uma função muito util.
Enviado: 09 Out 2007 15:25
por Maligno
Do jeito que esta nao se pode mudar do get da senha p/ outros gets, pelo menos tentei e nao consegui.
Não dá mesmo. Mas com esta função é até possível pegar uma senha. Só que tem que fazer uma gambiarra se tiver um nome de log-n também.
Enviado: 09 Out 2007 15:32
por Stanis Luksys
É verdade, eu nem lembrava, mas não dá

(
Quando eu disse da vantagem de trabalhar com o get é de que o conteúdo fica disponível na mesma matriz que os demais gets antes do read.
Talvez de pra implementar uma situação onde se apertando a tecla 'pra cima' dê o foco pro get anterior.Mas essa tarefa deixo com os colegas que tiverem maior interesse. Estou usando mais o xHarbour e já tem este recurso de get com senha nativo.
Valeu!!!!!
Enviado: 09 Out 2007 15:50
por Pablo César
Eu ja precisei fazer isso e a minha saída foi alterar o GETSYS para que pudesse navegar entre os gets e fazer a visualização do que foi digitado com um carcater especial. Simplesmente verifico se o nome da variável é a da senha então faço a rotina de digitação/exibição de senha (+/- como a função do Stanis, INKEY em looping).
Enviado: 10 Out 2007 23:04
por rrfsistemas
Ja que vcs stão precisando de uma função de senha ...
Fiquem a vontade para comentar
este exemplo é so de senha...
Código: Selecionar todos
Function Senha(Lin,Col)
Local wSenha := "" ,;
wTamanho := 10 ,;
wDigito := "" ,;
wNroDigitos := 0
While .T.
If wNroDigitos = wTamanho
Exit
Endif
@ Lin,Col Say ""
wDigito = Inkey(0)
Do Case
Case wDigito = 13
Exit
Case wDigito = 27
Exit
Case wDigito = 8
wNroDigitos = wNroDigitos - 1
If wNroDigitos < 0
wNroDigitos = 0
Loop
EndIf
col = col - 1
@ Lin,Col Say " "
wSenha = Substr( wSenha,1,Len( wSenha ) - 1 )
Loop
EndCase
wNroDigitos = wNroDigitos + 1
wSenha = wSenha + Chr( wDigito )
@ Lin,Col Say Chr(004)
col = col + 1
End
wSenha = wSenha + Space( wTamanho - Len( wSenha ) )
Return( Upper( wSenha ) )