FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
checkbox en un form de registro
Hola
En un Form de registro, donde tengo dos edit, uno para nombre y otro para contraseña, para que funcione un CheckBox, el cual digo "recordar mi nombre y contraseña", que tengo que hacer? Es decir que si el checkbox está check, que la próxima vez que se ejecute la aplicación, las cajas edit tengan ya puestos el nombre y contraseña. Gracias. |
#2
|
||||
|
||||
Simplemente guardar esos datos en algún lugar donde tu aplicación pueda acceder, por ejemplo: Un archivo propietario, un archivo de inicio, el registro de configuraciones de windows.....
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
Hola
Los guardo en un txt. Pero luego no se como decirle para que salga en los edit lo guardado en los txt. Como les digo a los edit que lo lea ? En el botón de login tengo puesto: procedure TForm2.Button2Click(Sender: TObject); Var MiRegistro : textfile; MiRegistro2 : textfile; name : string; password : string; begin name := edit1.Text; Password := edit2.Text; AssignFile (MiRegistro,'name.txt'); AssignFile (MiRegistro2,'password.txt'); reWrite (MiRegistro); reWrite (MiRegistro2); writeln(MiRegistro,name); writeln(MiRegistro2,password); CloseFile (MiRegistro); CloseFile (MiRegistro2); end; Y en el checkbox: procedure TForm2.CheckBox1Click(Sender: TObject); var MiRegistro : Textfile; MiRegistro2 : Textfile; name : string; password : string; begin AssignFile (MiRegistro,'name.txt'); AssignFile (MiRegistro2,'password.txt'); Reset (MiRegistro); Reset (MiRegistro2); Read(MiRegistro,name); Read(MiRegistro2,password); CloseFile (MiRegistro); CloseFile (MiRegistro2); Edit1 := aqui no se que poner para que me funcione Edit2 := aqui no se que poner para que me funcione end; Gracias |
#4
|
|||
|
|||
Hola
Me faltaba esto creo, pero para que funcione cuando esta check: if checkbox1.Checked then Edit1 := No se que poner Edit2 := No se que poner. Por lo que el checkbox queda así: procedure TForm2.CheckBox1Click(Sender: TObject); var MiRegistro : Textfile; MiRegistro2 : Textfile; name : string; password : string; begin AssignFile (MiRegistro,'name.txt'); AssignFile (MiRegistro2,'password.txt'); Reset (MiRegistro); Reset (MiRegistro2); Read(MiRegistro,name); Read(MiRegistro2,password); CloseFile (MiRegistro); CloseFile (MiRegistro2); if checkbox1.Checked then Edit1 := aqui no se que poner para que me funcione Edit2 := aqui no se que poner para que me funcione end; En otro form me funciona para leer los edit en un label con un caption: Label1.Caption := name; Y me sale en el label lo puesto en el edit. Pero para que me salga en el edit no se hacerlo. Gracias. |
#5
|
||||
|
||||
Cita:
es decir, la propiedad de un Edit análoga al Caption de un Label es Text. Pero creo que hay un error conceptual en tu diseño. No me parece lógico que los datos se lean cuando se hace click en el checkbox "recordar mi nombre y contraseña". // Saludos |
#6
|
|||
|
|||
Hola Roman.
Me funciona. Pero el problema que tengo ahora es que si le doy al checkbox me sale lo puesto la última vez, pero al ejecutar la aplicación el checkbox me sale sin checked y los edit vacíos. Y al darle al check se rellenan los edit. Hay alguna forma de que al ejecutar la aplicación y llamar al form, salgan los edit ya con los datos escritos ? Si el checkbox le pongo la propiedad de checked true, lo que consigo es que salga check pero no con los edit rellenos. Gracias |
#7
|
||||
|
||||
Por eso te digo que hay un error conceptual en tu diseño.
Para empezar yo no pondría nada de código en el evento OnClick del CheckBox. El CheckBox únicamente sirve para indicar si se guardan o no los datos. Por otro lado Esquemáticamente hablando yo haría algo así: Evento OnShow del formulario Buscas los archivos 'name.txt' y 'password.txt'. Si no existen es que no se pidió guardar los datos. Si existen lees las variables y las asignas a los Edit y marcas la casilla. Evento OnClick del botón Login Verificas los datos para determinar si son correctos o no Evento OnClose del formulario Si el login fue correcto (no tiene caso guardar los datos si fue incorrecto) te fijas en el valor de la casilla. Si está marcada guardas los datos en tus archivos 'name.txt' y 'password.txt'. En caso contrario, si existen estos archivos los borras. Esto es adaptando a tu técnica de tener archivos 'name.txt' y 'password.txt' pero yo guardaría todos los datos en un sólo lugar. Podría ser el registro de Windows o un archivo ini. Por ejemplo, puedes crear un archivo ini 'opciones.ini': Código:
[login] username=fulano password=tupassword Usa un objeto TIniFile para leer el archivo:
ReadString toma tres parámetros: nombre de la sección del archivo ini, identificador en esa seccción que quieres leer, valor por defecto en caso de que no se encuentre. Si UserName y Password son cadenas vacías es que no se pidió guardar los datos. En caso contrario los pones en los Edit y marcas la casilla. Para guardar usas:
// Saludos |
#8
|
||||
|
||||
Además de guardar los datos del user y pass en el fichero, deberías guardar una opción que te diga si se guardan o no desde la última vez, para que cuando ejecutes la aplicación primero veas si tiene que estar el check activo, si es así, recoge los datos del user y pass, si desmarcas esta opción deberías guardarla tambien el en txt, para que a la proxima vez que ejecutes la aplicación, no introduzca los datos.
// Para guardar los datos cuando haces click en recordar los datos procedure TfrmPrincipal.recordarClick(Sender: TObject); var fText : TextFile; fFichero : String; // Nombre del fichero lFichero : String; // Linea del fichero bEstado : Boolean; // Si está o no marcada la opción de guardar los datos begin Try lFichero := ' '; fFichero := 'Nombrefichero.txt' // Con la ruta claro...;-) AssignFile(fText, fFichero); Rewrite(fText); if checkbox.enabled then begin bEstado := 'T'; // Los ';' son para separar los datos en el fichero sFichero := bEstado + ';' + edUser.Text + ';' + edPass.Text; end else begin bEstado := 'F'; sFichero := bEstado; end; Writeln(fText, sFichero); CloseFile(fText); except MessageDlg('Error en el fichero de user', mtConfirmation, [mbYes], 0); CloseFile(fText); end; end; // Este código se debería poner antes de realizar el application.run // Jugamos con las mismas variables de antes AssignFile(fText, fFichero); Reset(fText); Readln(fText, sLinea); // en sLinea tenemos la linea que guardamos la última vez, lo que hay que // buscar, si el primer caracter es 'T' ó 'F', para seguir o no // Crearse una función que busque el caracter ';' en la linea sLinea // cuidado, si hay ';', porque puede ser el primero ; o él último eso // hay que controlarlo. nPos := buscar(sLinea, ';'); if nPos = 0 then begin // no hay ; esto es que no se quiso guardar end else begin // hay ; pues recoger todos los datos del user y pass, y marcar el clic como // activo end; CloseFile(fText); Espero que te haya servido, lo hice rapido y no se si le falta algún control, o que? salu2.
__________________
Te va a faltar cielo para dar vueltas... by Calico. |
#9
|
||||
|
||||
Como dice Roman, en el clic del check no hacer nada, si cuando pulsas aceptar, este está marcado guardar los ficheros con los datos, o el fichero según decidas como hacerlo.
salu2.
__________________
Te va a faltar cielo para dar vueltas... by Calico. |
#10
|
||||
|
||||
Cita:
// Saludos |
#11
|
|||
|
|||
.txt .ini no sería un fallo de seguridad ?
Hola
Bien, es que en ficheros .txt o ficheros .ini, se leen con bloc de notas. Y creo que guardar un nombre y contraseña de acceso en estos archivos sería un fallo de seguridad. Que opináis. Lo mejor sería guardarlo en registro de windows ? Si puede ser así, que tendría que poner en el evento click del botón login para que lo puesto en los edit nombre y contraseña se guarde en el registro de windows ? Y que tendría que hacer luego para que el checkbox si esta checked lea ese registro de windows y al abrir la aplicación, los edit ya tengan ese nombre y contraseña ? Gracias |
#12
|
||||
|
||||
Cita:
Si vas a guardar datos importantes y privados, guardes dónde los guardes lo importante es que esten bien encriptados.
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#13
|
|||
|
|||
No lo se, la verdad pensaba que podían leer más facilmente por ajenos a nuestro ordenador los archivos .txt que lo que tienes en el registro de windows
|
#14
|
||||
|
||||
En lugar de guardarlo como .txt guarda el archivo con extensión .XCR ya no sale el icono del bloc de notas. Es un truco muy usado
Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#15
|
|||
|
|||
md5. Guardarlo en txt pero encriptado.
Hola
Si, guardarlo así no sale el icono de bloc de notas, pero creo que no deja de ser un fallo de seguridad. Alguien sabe como guardarlo en .txt pero que se guarde encriptado? Se guardan las claves en .txt pero después de encriptarlo. En comoponentes indy creo que hay algo de esto, md5 pero no se donde. Gracias. |
#16
|
||||
|
||||
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#17
|
|||
|
|||
Gracias.
Voy a buscar. |
#18
|
|||
|
|||
No me funciona correctamente
Hola
He leído mensajes del foro de encriptación y muchos hablan del truco nº 1oo de http://www.q3.nu/trucomania/ Pero en los comentarios sale también que no funciona correctamente y eso es lo que me pasa. También Miguel Angel comenta: A mi me funciona perfectamente, aunque con dos limitaciones. 1 Se ha de utilizar variables de tipo string (No un componente como TEdit, TMemo etc.). 2 El tamaño de la cadena a encriptar no puede ser mayor de 255 caracteres. Yo creo un fichero .txt de los Edit y en el evento click de un botón se guarda encriptado. Luego en el evento click de otro botón recuperarlo, desencriptarlo y que aparezca en los edit. Me funciona correctamente, pero en algunas palabras no. En algunas se me corta, en otras aparece en los edit parte del encriptado. Que puedo hacer? Si no funciona correctamente por los edit que puedo hacer? Gracias. Code: implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); Var MiFichero : TextFile; Nombre : String; const C1 = 52845; C2 = 11719; function Encrypt(const S: String; Key: Word): String; Var I: byte; begin SetLength(Result,Length(S)); for I := 1 to Length(S) do begin Result[i] := char(byte(S[i]) xor (Key shr 8)); Key := (byte(Result[i]) + Key) * C1 + C2; end; end; begin Edit1.Text := Encrypt(Edit1.Text,6474); Nombre := Edit1.Text; AssignFile (MiFichero,'nombre.txt'); Rewrite (MiFichero); writeln(MiFichero,Nombre); CloseFile (mifichero); Edit1.Clear end; procedure TForm2.Button2Click(Sender: TObject); Var MiFichero : TextFile; Nombre : String; const C1 = 52845; C2 = 11719; function Decrypt(const S: String; Key: Word): String; var I: byte; begin SetLength(Result,Length(S)); for I := 1 to Length(S) do begin Result[i] := char(byte(S[i]) xor (Key shr 8)); Key := (byte(S[i]) + Key) * C1 + C2; end; end; begin AssignFile (MiFichero,'nombre.txt'); Reset (MiFichero); Read(MiFichero,Nombre); CloseFile (mifichero); Edit1.Text := Nombre; Edit1.Text := Decrypt(Edit1.Text,6474); end; end. |
#19
|
||||
|
||||
Cita:
Cita:
PD: Viendo las trabas que tienes con algo tan sencillo... ¿No crees que sería importante capacitarte antes de encarar el proyecto?... Leer un libro, asistir a un curso...
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#20
|
|||
|
|||
En eso estoy
Si, estoy en ello. Pero a la vez que voy aprendiendo con libros y tutoriales me meto ha hacer cosas ya que creo que así se aprende. Si leo y no hago y no experimento, no aprendo.
Gracias |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|