PDA

Ver la Versión Completa : Formulario de login no funciona!!


ElCherchu
03-10-2003, 16:28:51
Hola amigos!!!

Hace varios días solicité ayuda sobre como mostrar un formulario de login inmediatemente despues de mostrar el menu principal de una aplicación, bueno, respondieron a mi solicitud con el siguiente código:

procedure TFrmPrincipal.FormShow(Sender: TObject);
begin
with TFrmLogin.Create(Self) do
try
if ShowModal = mrCancel Then
Self.Close;
finally
Free;
end;
end;

A simple vista funciona pero tiene el problema que no me muestra el menu principal sino el login al iniciar la aplicación, he intentado en el evento onCreate, OnActivate y no funcionan.

Me gustaría que si alguien tiene este problema ya resuelto por favor me ayude a resolverlo.

Cuento con ustedes..

ElCherchu....

Viet
03-10-2003, 16:42:18
hola:

Teoricamente el form de Login de las aplicaciones debe mostrarce antes de que aparezca el form principal, pero lo que quieres hacer se puede hacer con:

procedure TFrmPrincipal.FormShow(Sender: TObject);
begin
with TFrmLogin.Create(Self) do
try
if ShowModal = mrCancel Then
Self.Close;
finally
Free;
end;
end;


Esto debería funcionar correctamente....
:( Para que no te muestre el Form Principal este código debería estar en el OnCreate... estas seguro que esta en el OnShow, no?

ElCherchu
03-10-2003, 17:09:47
Hola amigos!!!

Viet gracia por tu ayuda, pero me parece que no me di a entender, lo que quiero es que cuando se muestre el menu principal de la aplicacion inmediatemente despues se muestre el login.

No quiero que el login se muestre al iniciar la aplicacion sino que aparezca encima del menu principal, o sea despues de haberse mostrado.

Primero Menu principal y luego login...

Gracias de antemano..

ElCherchu...

roman
03-10-2003, 17:42:29
¿Estás seguro de que no funciona si lo pones en el evento OnActivate?

Acabo de hacer la prueba y, efectivamente, si se pone en el evento OnShow, el que aparece primero es el formulario del login, lo caul es lógico ya que en el evento OnShow aún no termina el proceso para mostrar el formulario.

Sin embargo, al ponerlo en el evento OnActivate sucedió lo que tú quieres:

Apareció el formulario principal y sobre él el del Login.

Ahora bien, de cualquier manera yo no usaría el evento OnActivate. Éste se genera siempre que el formulario se activa desde otro formulario de la aplicación. Por tanto, si resulta que usas un tercer formulario en tu aplicación, cuando desde él selecciones el principal volverá a generarse OnActivate y por tanto a hacerse el login.

Para que te sirva el evento OnShow puedes hacer lo siguiente:

Deberás generar tu mismo un evento que se ejecute después de OnShow. La manera de hacerlo es crando un mensaje personal y un manejador para él:


const
CM_AFTERSHOW = WM_USER + 1;

type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);

private
procedure CMAfterShow(var Msg: TMessage);
message CM_AFTERSHOW;
end;

implementation

procedure TForm1.CMAfterShow(var Message: TMessage);
begin
Application.ProcessMessages;

with TForm2.Create(Self) do
begin
try
if ShowModal = mrCancel then
Self.Close;
finally
Free;
end;
end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
PostMessage(Handle, CM_AFTERSHOW, 0, 0);
end;


PostMessage mandará el mensaje CM_AFTERSHOW sólo haste que termine el evento OnShow, con lo cual garantizas que al llegar a CMAfterShow el formulario ya se mostró.

// Saludos

ElCherchu
09-10-2003, 15:54:51
Gracias a todos!!

El código que envió roman hace exactamente lo que quiero..

Gracias por todo...