PDA

Ver la Versión Completa : Problema con pantalla de password (ventana modal)


Durbed
29-04-2005, 15:06:11
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:

//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:

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, 15:41:04
Haz lo siguiente:


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, 11:45:37
Sigue sin funcionar bien, a ver que es lo que pasa. Este es el código que tengo en el .dpr:

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, 13:06:25
Revisa la solución de Roman en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=4149&highlight=WM_USER).

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

Un saludo

Durbed
04-05-2005, 12: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.


...
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, 13:51:31
Hola
Comenta el FLogin.free
Saludos

Durbed
04-05-2005, 14: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, 16:18:39
A mi con lo que te puse me funciona perfectamente.

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.