Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con pantalla de password (ventana modal) (https://www.clubdelphi.com/foros/showthread.php?t=20915)

Durbed 29-04-2005 14:06:11

Problema con pantalla de password (ventana modal)
 
Despues de mirame varios hilos del foro no doy con la solucion al problema, el código que uso es el siguiente en el dpr:
Código:

//Creo la ventana modal de la contraseña
  FLogin := TFLogin.Create(Application);
  Respuesta := FLogin.ShowModal;
  if Respuesta = mrOK then
        begin
          Application.CreateForm(TForm1, Form1);
          Application.Run;
    end;

y en el boton Ok del form de la contraseña tengo esto:
Código:

procedure TFLogin.BOKClick(Sender: TObject);
 begin
  //comparo el nombre de usuario y la contraseña
  ModalResult := mrok;
 end;
 
 procedure TFLogin.FormClose(Sender: TObject; var Action: TCloseAction);
 begin
  If ModalResult <> mrOk Then
        close;
        //ModalResult := mrAbort;
 end;

El problema que tengo, es que cuando le doy al Ok (se supone que los datos son correctos y debe iniciar la aplicacion), funciona bien, pero si cierro del aspa, me salen errores, aunque cierra la aplicacion.

Como lo puedo arreglar, para que no salgan esos errores, creo que tendria que liberar o cancelar la ejecucion, pero no encuentro el procedimiento adecuado que creo que seria algo como Application.Close;

hermes_32 29-04-2005 14:41:04

Haz lo siguiente:

Código Delphi [-]
  Application.Initialize;
  Application.CreateForm(TFLogin, FLogin);
  Respuesta := FLogin.ShowModal;
  if Respuesta = mrOK then begin
    FLogin.Destroy;
    Application.CreateForm(TForm1, FForm1);
    Application.Run;
  end
  else Application.Terminate;

Un saludo.

Durbed 03-05-2005 10:45:37

Sigue sin funcionar bien, a ver que es lo que pasa. Este es el código que tengo en el .dpr:
Código:

Var
  Respuesta: Integer;
 
 begin
  Application.Initialize;
  Application.CreateForm(TDMAgenda, DMAgenda);
  Application.CreateForm(TDMHacienda, DMHacienda);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TFLogin, FLogin);
  Application.CreateForm(TFAgenda_MDIChild, FAgenda_MDIChild);
  //Creo la ventana modal de la contraseña
  Respuesta := FLogin.ShowModal;
  if Respuesta = mrOK then
        begin
          FLogin.Destroy;
          Application.CreateForm(TForm1, Form1);
          Application.Run;
        end
  else
        Application.Terminate;
 end.

Y el error es una violacion de acceso de memoria, que se produce despues de ejecutar Application.Terminate; En el Formulario del Login no hago nada aun, es decir que si das al OK pongo mrOK, si das a la X pongo mrAbort.

Un saludo y gracias.

Lepe 03-05-2005 12:06:25

Revisa la solución de Roman en este hilo.

con esto, muestras la ventana principal de tu programa y la de login.

Un saludo

Durbed 04-05-2005 11:48:58

He modificado el código de la siguiente forma, pero no hay manera, sigue dando el error de violavion de memoria, y ya no se que mas probar, creo que así esta bien, el error lo da al final del todo, es decir, que salta en la linea end.

Código:

...
 begin
  Application.Initialize;
  Application.CreateForm(TDMAgenda, DMAgenda);
  Application.CreateForm(TDMHacienda, DMHacienda);
  FLogin := TFLogin.Create(Application);
  try
        Respuesta := FLogin.ShowModal;
        if Respuesta = mrOK then
          begin
                Application.CreateForm(TForm1, Form1);
                Application.CreateForm(TFAgenda_MDIChild, FAgenda_MDIChild);
                Application.Run;
          end
        else
          Application.Terminate;
  finally
        FLogin.Free;
 end;
 
 end.

Gracias.

kalimero 04-05-2005 12:51:31

Hola
Comenta el FLogin.free
Saludos

Durbed 04-05-2005 13:15:55

Kalimero, asi tampoco ha funcionado, pero al final lo he resuelto de una forma mejor, pues ahora si se introducen mal los datos del login, entra al programa, donde puede crearse una agenda o conectarse a una existente.

Gracias.

hermes_32 04-05-2005 15:18:39

A mi con lo que te puse me funciona perfectamente.

Cita:

Empezado por Durbed
Y el error es una violacion de acceso de memoria, que se produce despues de ejecutar Application.Terminate; En el Formulario del Login no hago nada aun, es decir que si das al OK pongo mrOK, si das a la X pongo mrAbort.

Si le das al OK -> ModalResult := mrOk
Si le das a la X -> ModalResult := mrCancel

Otro detalle, la pantalla que tu llamas Form1 no la pongas "autocreate". Es decir, en Project->Options la tienes que dejar en la lista de la derecha.

Un saludo.


La franja horaria es GMT +2. Ahora son las 04:14:35.

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