La Web del Programador: Comunidad de Programadores
 
    Pregunta:  45400 - COMO HACER PARA MOSTRAR ASTERISCOS EN UN CAMPO GET (PASSWORD
Autor:  Yangnhay Gutierrez
Como hacer para que en Foxpro 2.6 para dos al introducir datos en un campor GET aparezcan asteriscos, ejemplo, un campo de contraseña.

Le agradeceré cualquier sugerencia.

  Respuesta:  Juan Fuentes
En Foxpro 2.6 para DOS lo mejor que he podido hacer es incluir esta linea:
@ 10,40 GET VJPASS FUNC 'K' COLOR ,W+/W*, ,,,N+/N* SIZE 1,25 PICTURE '@!' DEFAULT SPACE(20)
READ

No muestra asteriscos, pero no muestra lo tecleado, solo se ve que el cursor avanza.

Por otra parte, creé una función que usa Inkey() para capturar lo tecleado y mostrar asteriscos:

V_CLAVE = ""
V_PASS = ""
CONTEO = 0
DO WHILE V_PASS # V_CLAVE AND CONTEO < 3
CONTEO = CONTEO + 1
V_PASS = PASSWRD(8)
IF V_CLAVE # V_PASS
WAIT WIND "Esa no es la llave de acceso..."
ENDIF
ENDDO

Las lineas anteriores permiten 3 oportunidades de teclear un password correcto.

Esta funcion muestra asteriscos y devuelve los datos tecleados.

FUNC PASSWRD
PARA PW_LEN
PRIV PW_LEN, PASS_STR, KEY, CUR_CURS
PUSH KEY CLEAR
IF PARA() = 0 && Si no hay parametros, se asume
PW_LEN = 8 && una longitud de 8 caracteres.
ENDIF
PASS_STR = ''
KEY = 0
CUR_CURS = SET('CURSOR') = 'ON' && Estado actual del cursor
SET CURSOR ON
CUR_WIN = WOUTPUT()
DEFI WIND PASS_WIN FROM 08,20 TO 15,60
ACTI WIND PASS_WIN
@ 02,08 SAY 'Ingrese llave de Acceso'
@ 03,12 SAY '(' + ltrim(str(pw_len)) + ' caracteres)'
@ 05,15 SAY ''
DO WHILE KEY # 13 && Ingresar hasta que presione Enter
M.KEY = INKEY(0)
DO CASE
CASE ISALPHA(CHR(M.KEY)) OR (M.KEY >= 32 AND M.KEY <= 64)
PASS_STR = PASS_STR + CHR(M.KEY)
CASE M.KEY = 19 OR M.KEY = 127 OR M.KEY = 7
@ ROW(),COL()-1 SAY ' '
@ ROW(),COL()-1 SAY ''
PASS_STR = SUBS(PASS_STR,1,LEN(PASS_STR)-1)
ENDCASE
IF LEN(PASS_STR) >= PW_LEN
M.KEY = 13
ENDIF
@ 05,15 SAY SPAC(PW_LEN)
@ 05,15 SAY REPL('*',LEN(PASS_STR))
ENDDO
RELE WIND PASS_WIN
IF EMPTY(CUR_WIN)
ACTIVATE SCREEN
ENDIF
IF NOT CUR_CURS
SET CURSOR OFF
ENDIF
POP KEY
IF LEN(PASS_STR) < PW_LEN
FOR J_K = LEN(PASS_STR) TO PW_LEN-1
PASS_STR = PASS_STR + " "
NEXT
ENDIF
PASS_STR = UPPER(PASS_STR)
RETURN(PASS_STR)

Espero te sirva.

  Respuesta:  Jose Luis Henriquez
Gutierrez

En la propiedad del Text Box llamada: PasswordChar ponle un (*)