Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 21-06-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 21-06-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 21-06-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por gontxalo
Edit1 := aqui no se que poner para que me funcione
Edit1.Text := name;

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
Responder Con Cita
  #6  
Antiguo 21-06-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Entre corchetes se indica el nombre de la sección del archivo ini y puedes tener más secciones si así lo necesitas.

Usa un objeto TIniFile para leer el archivo:

Código Delphi [-]
var
  IniFile: TIniFile;
  UserName: String;
  Password: String;

begin
  IniFile := TIniFile.Create('opciones.ini');
  UserName := IniFile.ReadString('login', 'username', '');
  Password := IniFile.ReadString('login', 'password', '');
end;

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:


Código Delphi [-]
IniFile.WriteString('login', 'username', Edit1.Text);
IniFile.WriteString('login', 'password', Edit2.Text);

// Saludos
Responder Con Cita
  #8  
Antiguo 21-06-2005
Avatar de Crazyro
Crazyro Crazyro is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 14
Poder: 0
Crazyro Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 21-06-2005
Avatar de Crazyro
Crazyro Crazyro is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 14
Poder: 0
Crazyro Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Crazyro
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.
Había pensado algo similar a esto, pero creo que no es necesario guardar esa opción y simplemente basarse en el hecho de que estén o no presentes los otros valores.

// Saludos
Responder Con Cita
  #11  
Antiguo 04-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
.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
Responder Con Cita
  #12  
Antiguo 04-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por gontxalo
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 ?
Los TXT los lees con el block de notas, y el Registro con el Regedit... ¿Cuál es la diferencia?
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.
Responder Con Cita
  #13  
Antiguo 04-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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
Responder Con Cita
  #14  
Antiguo 04-07-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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.
Responder Con Cita
  #15  
Antiguo 04-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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.
Responder Con Cita
  #16  
Antiguo 04-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por gontxalo
Hola
Alguien sabe como guardarlo en .txt pero que se guarde encriptado?
Busca en el foro la palabra: "encriptar" y vas a encontrar varios hilos al respecto.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #17  
Antiguo 04-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
Gracias.
Voy a buscar.
Responder Con Cita
  #18  
Antiguo 05-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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.
Responder Con Cita
  #19  
Antiguo 05-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por gontxalo
1 Se ha de utilizar variables de tipo string (No un componente como TEdit, TMemo etc.)
Los dos componentes tienen una propiedad Text que es del tipo string, simplemente tienes que encriptar ese valor

Cita:
Empezado por gontxalo
2 El tamaño de la cadena a encriptar no puede ser mayor de 255 caracteres.
Esto depende del algoritmo a utilizar.


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.
Responder Con Cita
  #20  
Antiguo 05-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 19
gontxalo Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:29:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi