Contraseña
Publicado por Kike (304 intervenciones) el 12/10/2007 22:20:16
Saludos. Deseo que al introducir una contraseña en un texto editable de una GUI se cambie cada letra que digite el usuario por un asterisco. Ya lo he logrado, pero tengo problemas cuando presiono Shift o BloquearMayúsculas.
Aquí pongo el programa. Para que funcione, en el Inspector de Propiedades del texto editable la propiedad KeyPressFcn debe tener el siguiente valor:
nombre_programa('edit1_KeyPressFcn',gcbo,[],guidata(gcbo))
Y la propiedad UserData tiene el siguiente valor: [42;0]
La lógica es esta: el programa detecta qué letra digita el usuario, y la sustituye en el texto editable por un asterisco. Las letras son detectadas como valores double (ASCII), por ello inicializo UserData con 42 (que corresponde al asterisco) y dejo la segunda fila de la matriz UserData para almacenar los doubles de las letras que digita el usuario.
Y esta es la función:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function edit1_KeyPressFcn(hObject, eventdata, handles)
set(gcf,'Color',[rand,rand,rand]); % cambia el color de la ventana cada vez que se presiona
% una tecla
matriz=get(handles.edit1,'UserData'); % obtengo el contenido de UserData
as=matriz(1,:); % Asteriscos. Están en la primera fila de UserData
palabraas=get(gcf,'CurrentCharacter'); % palabra que se muestra en el texto editable, que
% contiene sólo asteriscos
palabra=palabraas(end); % palabra que va digitando el usuario. Tomo el último caracter
% porque los demás son asteriscos
matriz(2,end+1)=palabra; % almaceno el double de la letra
as=[as,42]; % agrego otro asterisco por cada letra digitada
set(handles.edit1,'String',char(as)); % el usuario sólo ve asteriscos cuando escribe
matriz(1,:)=as;
set(handles.edit1,'UserData',matriz); % actualizo UserData
% Muestro el vector de doubles y las letras que ha digitado el usuario. Elimino el primer
% elemento porque fue con el que inicialicé a UserData antes que el usuario
% comenzara a escribir
matriz(2,2:end)
char(matriz(2,2:end))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
El problema es que no reconoce las teclasShift ni a BloquearMayúsculas. Parece que estas teclas no tienen un valor ASCII asignado, sin embargo las letras aparecen mayúsculas. ¿Sabe alguien cómo hacer para reconocer estas teclas?
Aquí pongo el programa. Para que funcione, en el Inspector de Propiedades del texto editable la propiedad KeyPressFcn debe tener el siguiente valor:
nombre_programa('edit1_KeyPressFcn',gcbo,[],guidata(gcbo))
Y la propiedad UserData tiene el siguiente valor: [42;0]
La lógica es esta: el programa detecta qué letra digita el usuario, y la sustituye en el texto editable por un asterisco. Las letras son detectadas como valores double (ASCII), por ello inicializo UserData con 42 (que corresponde al asterisco) y dejo la segunda fila de la matriz UserData para almacenar los doubles de las letras que digita el usuario.
Y esta es la función:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function edit1_KeyPressFcn(hObject, eventdata, handles)
set(gcf,'Color',[rand,rand,rand]); % cambia el color de la ventana cada vez que se presiona
% una tecla
matriz=get(handles.edit1,'UserData'); % obtengo el contenido de UserData
as=matriz(1,:); % Asteriscos. Están en la primera fila de UserData
palabraas=get(gcf,'CurrentCharacter'); % palabra que se muestra en el texto editable, que
% contiene sólo asteriscos
palabra=palabraas(end); % palabra que va digitando el usuario. Tomo el último caracter
% porque los demás son asteriscos
matriz(2,end+1)=palabra; % almaceno el double de la letra
as=[as,42]; % agrego otro asterisco por cada letra digitada
set(handles.edit1,'String',char(as)); % el usuario sólo ve asteriscos cuando escribe
matriz(1,:)=as;
set(handles.edit1,'UserData',matriz); % actualizo UserData
% Muestro el vector de doubles y las letras que ha digitado el usuario. Elimino el primer
% elemento porque fue con el que inicialicé a UserData antes que el usuario
% comenzara a escribir
matriz(2,2:end)
char(matriz(2,2:end))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
El problema es que no reconoce las teclasShift ni a BloquearMayúsculas. Parece que estas teclas no tienen un valor ASCII asignado, sin embargo las letras aparecen mayúsculas. ¿Sabe alguien cómo hacer para reconocer estas teclas?
Valora esta pregunta
0