Função para Getar senha

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Função para Getar senha

Mensagem 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.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
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

/********** * * * * *  
*  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...
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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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!
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
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

É apenas uma outra opção....não post para comprar uma com a outra...nem para ser votada !!! apenas é um exemplo.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Claro, que tem...assim como eu fiz na WAPI agora mesmo !!!
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Eu vi e já respondi. Obrigado.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem 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.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem 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.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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!!!!!
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
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á

Mensagem 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).
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
rrfsistemas
Usuário Nível 3
Usuário Nível 3
Mensagens: 249
Registrado em: 11 Jul 2004 18:16
Localização: Uberlândia/MG

Mensagem 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 ) )
"Não é a ferramenta que faz o artesão e sim a sua criatividade...""
Renato Ribeiro Ferreira
Tecnologia em Analise de Sistemas de Informação
http://www.rrfsistemas.hd1.com.br
( VFP 9 + MySql e/ou Oracle 11 ) - ...Harbour/MiniGui...
Responder