Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con Password dialog (https://www.clubdelphi.com/foros/showthread.php?t=66382)

valera 16-02-2010 23:52:15

Ayuda con Password dialog
 
Hola, muy buenas tardes, necesito de su ayuda, porque yo no le puedo, no le puedo y no le puedo, ya estuve checando varios hilos y sigo sin encontrarle una solucion. mi problema es el siguiente tengo una aplicacion MDI y utilizo un password Dialog para usuario y contraseña, quiero que el password dialog sea el primero en aparecer y cuando la contraseña sea incorrecta que me permita capturarla hasta 3 veces, el codigo en el archivo DPR:
Código:

{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TPrincipal, Principal);
  Application.CreateForm(TPasswordDlg, PasswordDlg);
  Application.CreateForm(TModulo, Modulo);
  Application.CreateForm(TSplash, Splash);
  Application.CreateForm(TFrSeleccionarArt, FrSeleccionarArt);
  //Application.Run;
  PasswordDLG.ShowModal;

en el boton aceptar del PasswordDLG tengo el siguiente codigo, a es una variable global:

Código:

procedure TPasswordDlg.OKBtnClick(Sender: TObject);
var
i:integer;
begin
 if DBLookupComboBox1.Text=''then
  begin
    Showmessage('No ha seleccionado el usuario, favor de hacerlo');
    DBLookupComboBox1.SetFocus;
  end
else
  begin
    principal.Edit9.Text:=DBLookupComboBox1.Text;
    modulo.ADOEmpleado.Filtered:=false;
    modulo.ADOEmpleado.Filter:=('Nombre=')+ quotedstr(DBLookupComboBox1.Text);
    modulo.ADOEmpleado.Filtered:=true;
    Edit3.Text:=modulo.ADOEmpleadoId_empleado.AsString;
    modulo.ADOEmpleado.Filtered:=false;
    modulo.ADOPassword.Filtered:=false;
    modulo.ADOPassword.Filter:=('Id_empleado=')+quotedstr(Edit3.Text);
    modulo.ADOPassword.Filtered:=true;
    if Password.Text=modulo.ADOPasswordPassword.AsString then
      begin
        Splash.Show;
        Splash.Update;
        for i:=1 to 100 do
          begin
            Splash.ProgressBar1.Position:=i;
            sleep(20);
          end;
          Splash.Close;
          application.Run;
      end
    else
      begin
        Password.Clear;Password.SetFocus;
        showmessage(' La contraseña no es la correcta, intentelo de nuevo');
        a:=a+1;
        if a=3 then
          begin
            showmessage('Ya perdió usted las 3 oportunidades, Adios');
            application.Terminate;
          end;
      end;
  end;
end;

Espero su sugerencia, por su atencion y tiempo muchas gracias.

roman 17-02-2010 00:59:56

Sería útil que nos contaras qué es lo que no funciona de tu código.

// Saludos

movorack 17-02-2010 02:55:10

Así de rapidez se me ocurre que podrias hacer del mismo splash el formulario del password.

valera 19-02-2010 22:29:16

Creo que no me explique bien
 
Gracias por contestar, El codigo que les puse cuando la contraseña es correcta entra, eso esta bien, lo que no me funciona del codigo es que cuando la contraseña sea incorrecta quiero que me permita volver a capturar la contraseña hasta 3 veces y despues de las 3 veces sino le atino que me cierre la aplicacion.

rgstuamigo 20-02-2010 00:00:11

Para qué complicarse tanto,tan sólo has esto en el evento OnCreate de tu Formulario principal:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=False;//Esto hace que el formulario principal sea no visible.
end;
Luego en tiempo de Diseño pones la propiedad Visible=True y su propiedad FormStyle=fsNormal de tu formulario que es donde el usuario se Loguea, de esa manera cuando corra tu aplicacion lo primero que se va mostrar es el formulario donde se loguea.;)
Para el caso de sólo permitir 3 intentos pues te es suficiente tener una variable que cuente las veces que el usuario intentó, ésto sería en el boton de Aceptar de tu formulario de Logueo mas o menos así:
Código Delphi [-]
procedure TFormDeLogueo.ButtonAceptarClick(Sender: TObject);
begin
  if El_Logueo_EsValido then  //si el usuario a introducido el login y contraseña valida
       begin
         Self.Hide;//encondo el formulario de Logueo
         Application.MainForm.Show;// Recien muestro el formulario Principal
      end
  else
     begin
     Cantidad_de_Intentos:=Cantidad_de_Intentos+1;
       If Cantidad_de_Intentos=3 then
         begin
           ShowMessage('Intentos Agotados');
           Application.Terminate;//Termina la aplicacion ya intentó 3 veces
         end
       else
         ShowMessage('Usuario desconocido..');
     end;
end;
Desde luego debes inicializar la variable Cantidad_de_Intentos con cero, ésto lo puedes hacer en el evento OnCreate de tu formualrio de Logueo;).
Espero te sea de Utilidad.;).
Saludos...:)

valera 20-02-2010 18:27:16

Gracias, ya solucione el problema
 
Hola rgstuamigo muchas gracias por la ayuda, apliqué tu idea en el programa y sí funcionó, y tambien gracias a todos los que me respondieron.


La franja horaria es GMT +2. Ahora son las 17:37:30.

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