PDA

Ver la Versión Completa : Password en un TValueListEditor???


ungrande87
27-07-2014, 17:18:01
Hola, les comento un poco lo que hace mi programa y lo que estoy intentando realizar:

Cargo datos desde una base de datos a un componente TValueListEditor y resulta que en uno de los datos que cargo es un Password, lo que quiero hacer es ese campo se vea todo con asteriscos (******) y que a la hora de modificar el campo, lo que ingrese también se vea con asteriscos y que luego guarde correctamente los datos. Al que me pueda brindar alguna ayuda o alguna orientación se le va a agradecer mucho.

Gracias

PD: Estoy trabajando en Delphi XE.

Neftali [Germán.Estévez]
28-07-2014, 11:03:57
* Cargo datos desde una base de datos a un componente TValueListEditor
* uno de los datos que cargo es un Password

=> lo que quiero hacer es ese campo se vea todo con asteriscos (******)
=> y que a la hora de modificar el campo, lo que ingrese también se vea con asteriscos
=> y que luego guarde correctamente los datos.


Entiendo que quieres que la celda del TValueListEditor se comporte como un Edit/DbEdit (que poseen la propiedad PasswordChar).

Tal vez la visualización se podría corregir con el evento OnDrawcell, pero creo que el tema de la edición te va a dar muchos problemas. El intentar realizar sobre el mismo grid (TValueListEditor) creo que te va a dar bastante trabajo.

Pregunta: ¿Seria mucho inconveniente, por ejemplo, que al editar el password pudieras hacerlo en otra ventana? A veces un cambio de enfoque resuelve muchas cosas.
Estoy pensando en una ventana modal, que te preguntara sólo el password. En esa ventana podrías usar TEdit/TDBEdit normales con lo que tendrías el problema solucionado. En ese caso matas 2 pájaros de un tiro, porque podrías usar 2 componentes en lugar de uno, para preguntar el password por duplicado, cosa que se suele hacer cuando el usuario no ve lo que escribe (luego tú comparas ambos valores por si se ha equivocado).

ungrande87
28-07-2014, 21:07:18
Entiendo que quieres que la celda del TValueListEditor se comporte como un Edit/DbEdit (que poseen la propiedad PasswordChar).

Tal vez la visualización se podría corregir con el evento OnDrawcell, pero creo que el tema de la edición te va a dar muchos problemas. El intentar realizar sobre el mismo grid (TValueListEditor) creo que te va a dar bastante trabajo.

Pregunta: ¿Seria mucho inconveniente, por ejemplo, que al editar el password pudieras hacerlo en otra ventana? A veces un cambio de enfoque resuelve muchas cosas.
Estoy pensando en una ventana modal, que te preguntara sólo el password. En esa ventana podrías usar TEdit/TDBEdit normales con lo que tendrías el problema solucionado. En ese caso matas 2 pájaros de un tiro, porque podrías usar 2 componentes en lugar de uno, para preguntar el password por duplicado, cosa que se suele hacer cuando el usuario no ve lo que escribe (luego tú comparas ambos valores por si se ha equivocado).

Entonces a renegar un poco. Porque la idea es usar solo el Tvaluelisteditor. Gracias de todas formas Neftali

Neftali [Germán.Estévez]
29-07-2014, 10:24:24
Entonces a renegar un poco. Porque la idea es usar solo el Tvaluelisteditor.

No digo que no se pueda hacer; Si es condición indispensable pues puedes hacer algunas pruebas, pero que te va a dar trabajo.
Tal vez podrías usar un segundo componente TEdit e incrustarlo en la celda del ValueListEditor... Tal vez capturar las teclas y quedártelas mientras picas * (pero eso te dará otras complicaciones -borrado, backspace, pegar,...)

Como ves la cosa no es trivial... Habría que ir probando alternativas.

roman
29-07-2014, 17:52:53
El TValueListEditor utiliza un derivado de TEdit interno, al igual que un Grid. Podrías crear una clase derivada de TValueListEditor para tener acceso al TEdit (por ejemplo, redefiniendo el método protegido CreateEditor) y usar su propiedad PasswordChar. Aún así, como dice Neftalí, no será algo sencillo, pues el mismo TEdit es el que se usa para todas las celdas, así que tendrías que detectar cuándo está en la celda que te interesa y activar el PasswordChar sólo en ese momento.

// Saludos

ungrande87
29-07-2014, 21:31:11
El TValueListEditor utiliza un derivado de TEdit interno, al igual que un Grid. Podrías crear una clase derivada de TValueListEditor para tener acceso al TEdit (por ejemplo, redefiniendo el método protegido CreateEditor) y usar su propiedad PasswordChar. Aún así, como dice Neftalí, no será algo sencillo, pues el mismo TEdit es el que se usa para todas las celdas, así que tendrías que detectar cuándo está en la celda que te interesa y activar el PasswordChar sólo en ese momento.

// Saludos

No entiendo bien a lo que te refieres.

Ahora logre avanzar un poco, ya pude cargar todas las contraseñas mediante ********* teniendo en cuenta la longitud. Ahora en lo que estoy renegando es en el evento Keypress de dicho control, xq tengo que ingresar asteriscos solo cuando esta modificando el campo contraseña y no para el resto de los datos, nose si me entienden.

Saludos y gracias por la ayuda.

Al González
29-07-2014, 23:07:59
No entiendo bien a lo que te refieres.
[...] no sé si me entienden.
Se te entiende bien, y precisamente eso advertían ya los compañeros Neftali y roman en sus anteriores mensajes.

¿Qué palabra o parte del mensaje de Román fue la que no comprendiste?

Saludos cordiales. :)

ungrande87
31-07-2014, 14:12:27
Se te entiende bien, y precisamente eso advertían ya los compañeros Neftali y roman en sus anteriores mensajes.

¿Qué palabra o parte del mensaje de Román fue la que no comprendiste?

Saludos cordiales. :)

Esta parte "Podrías crear una clase derivada de TValueListEditor para tener acceso al TEdit (por ejemplo, redefiniendo el método protegido CreateEditor) y usar su propiedad PasswordChar.". Como hago eso?? disculpen mi ignorancia.