Página 2 de 2

Dúvida sobre entrada de senha

Enviado: 24 Out 2013 17:49
por Pablo César
Olá Toledo,

Consegui fazer que funcione a sua opção de digitar o caracter de espaços e corrigi sobre o BackSpace.

Veja como ficaria:

Código: Selecionar todos

Function Espaco_Press()
cCmpValue := GetProperty( cFrmName, cCmpName, "Value" )
nCmpPos  := GetProperty( cFrmName, cCmpName, "CaretPos" )
cCmpValue += Space(1)
SetProperty( cFrmName, cCmpName, "Value", cCmpValue )
SetWindowText ( GetControlhandle(cCmpName,cFrmName), cCmpValue )
SetProperty( cFrmName, cCmpName, "CaretPos", nCmpPos+1 )
Return .T.

Function Back_Press()
cCmpValue := GetProperty( cFrmName, cCmpName, "Value" )
nCmpPos  := GetProperty( cFrmName, cCmpName, "CaretPos" )
cCmpValue := Stuff(cCmpValue,nCmpPos,1,"")
SetProperty( cFrmName, cCmpName, "Value", cCmpValue )
SetProperty( cFrmName, cCmpName, "CaretPos", If(nCmpPos>0,nCmpPos-1,0))
Return .T.
Ahhh econtrei os seguintes bugs no meu código:
- BackSpace está sendo colocado no lugar certo, mesmo no meio do texto
- Aceita Enter para confirmação de senha
- Não para no CheckBox a pressionar TAB
- Reposicionamento da primeira coluna para visualizar o destaque por completo
- Aceita ESC como caminho de saída em todas as janelas

Portanto vou pedir mais uma vez atualizar o arquivo na seção de Downloads, por favor e obrigado pela atenção (ante como moderador tornava-se mais fácil pra mim rs).

Dúvida sobre entrada de senha

Enviado: 24 Out 2013 18:01
por Toledo
Pablo César escreveu:Consegui fazer que funcione a sua opção de digitar o caracter de espaços e corrigi sobre o BackSpace.
Eu já tinha corrigido estes probleminhas! E o seu código para a barra de espaço está mais enxuto.

O seu arquivo foi atualizado.

Abraços,

Dúvida sobre entrada de senha

Enviado: 24 Out 2013 18:32
por Pablo César
Obrigado Toledo pela atualização na seção de Downloads.

Ficou muito bom o seu exemplo, parabéns !
Toledo escreveu: E o seu código para a barra de espaço está mais enxuto.
Não fiz opção de ESPAÇO, mas nada que não possa ser implementado. Talvez mais uma fileira e aproveitaria colocar os botões SHIFT e BACKSPACE.

Outra sugestão: poderia colocar também a opção de voltar ao primeiro campo após ENTER para que possa navegar entre os campos no form anterior.

Programar com Minigui ou HMG é muito compensador...

Dúvida sobre entrada de senha

Enviado: 25 Out 2013 11:02
por luiz antonio da silva
Bom dia !

O assunto tá rendendo...rs, fiquei pensando nas possibilidades de mudanças, uma que me ocorreu foi a de vários caracteres em um unico botão (tipo web de banco), segue código exemplo:

Código: Selecionar todos

#include <hmg.ch>

Function Main
public tabela,CAPTURA:={}, SENHA:='789123', SENHA_OK:='111111'
nrow:=20
ncol:=-40
wid:=55
hei:=30

tabela:={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'}

DADOS:={}
num:=rt:=ok:=0
vr:=""
while .t.
num:=hb_randomint(1,len(tabela))
if num<1 .or. num>len(tabela); loop; endif

OK:=0
FOR N=1 TO LEN(DADOS)
    IF AT(TABELA[NUM], DADOS[N])<>0
		OK:=1
		N:=LEN(DADOS)
	ENDIF
NEXT N
	
if ok=0
	if at(tabela[num],vr)<>0; ok:=1; endif
endif

if ok=0
	vr+=tabela[num]
	if len(vr)=3
		xv:=subst(vr,1,1)+"-"+subst(vr,2,1)+"-"+subst(vr,3,1)
		aadd(dados, xv)
		vr:=""
		rt+=1
	endif
endif

if rt=(len(tabela)/3); exit; endif
enddo
aadd(dados, 'OK')

DEFINE WINDOW Tcv AT 306 , 853 WIDTH 850 HEIGHT 350 title "teclado (senha: 789123)" on init monta() main

for a=1 to len(dados)
   lb:='tecla'+strzero(a,3)
   lba:="'"+lb+"'"
   ncol:=ncol+60
   if ncol>780
      nrow:=nrow+35
      ncol:=20
   endif
   obj:=dados[a]
   
   @ 20,20 button &lb caption "" width 23 height 23 action tecla(&lba) 

   setproperty('tcv',lb,'row',nrow)
   setproperty('tcv',lb,'col',ncol)
   setproperty('tcv',lb,'caption',obj)
   setproperty('tcv',lb,'width',wid)
   setproperty('tcv',lb,'height',hei)
   setproperty('tcv',lb,'fontbold',.t.)
next a


END WINDOW
activate window tcv


Return

func monta()

retu 

func tecla(x)
tcl:=getproperty('tcv',x,'CAPTION')
IF TCL<>'OK'
	AADD(CAPTURA, TCL)
	RETU
ENDIF	

IF LEN(CAPTURA)<>LEN(SENHA)
    MSGINFO("SENHA INVALIDA !")
	CAPTURA:={}
	RETU
ENDIF
	
OK_SENHA:=""
FOR N=1 TO LEN(SENHA)
    IF AT(SUBST(SENHA,N,1), CAPTURA[N])<>0
		OK_SENHA+='1'
	ELSE
		OK_SENHA+="0"
	ENDIF
NEXT N

IF OK_SENHA=SENHA_OK
	MSGINFO("SENHA VALIDA !")
	CAPTURA:={}
ELSE
	MSGINFO("SENHA INVALIDA !")
	CAPTURA:={}
ENDIF
retu 
* Não me preocupei com o tamanho do código, ficou assim para que sua leitura seja simples.

abraço.
Luiz.

Dúvida sobre entrada de senha

Enviado: 25 Out 2013 11:38
por Pablo César
luiz antonio da silva escreveu:fiquei pensando nas possibilidades de mudanças, uma que me ocorreu foi a de vários caracteres em um unico botão
Então... foi o que eu arranjei com o botão SHIFT para obter duplo valor da mesma tecla, alternando-a...
Agora acabei de adicionar a tecla ESPAÇO, TAB e SHIFT-TAB para poder navegar entre os campos e vou fazê-lo com que navegue somente entre campos do tipo TEXT.

Dúvida sobre entrada de senha

Enviado: 26 Out 2013 12:02
por Pablo César
Motivado a melhorar o meu exemplo baseado nos recursos do exemplo do Toledo ao qual agradecemos imensamente a sua contribuição, eis as melhoras que fiz nesta versão:

- Adicionado novas teclas: Espaço, Tab, Shift-Tab
- Fiz uma nova opção de teste de formulário, apenas para navegar de campos de texto com o teclado
- Nova opção de CONFIG no menu principal para configurar se deseja com som, forçar VK e destacar ao clicar no VK
- Pode também alterar tais configurações na Barra de Status
- Foi adicionado exceções de teclas no VK. Você pode definir qual tecla estará habilitada
- Otimizado o posicionamento do VK dentro da área do desktop
- VK numérico comutável e auto reconhece TEXTBOX numéricos
- Opção de navegando entre campos do tipo TEXTO
- Código fonte otimizado
Screen1.PNG
Espero que gostem ! (A nova versão estará disponível na seção de Downloads)

Dúvida sobre entrada de senha

Enviado: 24 Jun 2014 16:50
por Claudio Soto
Funciones para manejar el teclado virtual del sistema (On Screen Keyboard) desde HMG: http://www.hmgforum.com/viewtopic.php?p=35243#p35243
Espero que les sea útil.

Dúvida sobre entrada de senha

Enviado: 21 Set 2017 14:29
por lugab
Bacana, rotina ótima pra quem quer aprender minigui...

Toledo, como é que eu compilo essa sua rotina ?

Grato

Dúvida sobre entrada de senha

Enviado: 21 Set 2017 23:05
por Toledo
Amigo, se você usa a MiniGui Extended, entre na pasta onde está o DEMO.PRG e digite:

\minigui\batch\compile demo

Abraços,

Dúvida sobre entrada de senha

Enviado: 22 Set 2017 00:30
por lugab
Obrigado, Toledo...

(Ps: Deixei uma solicitação em msg privada pra vc e aguardo sua resposta)

Um abraço