Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2003
ElCherchu ElCherchu is offline
Miembro
 
Registrado: may 2003
Posts: 76
Poder: 22
ElCherchu Va por buen camino
Formulario de login no funciona!!

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....
Responder Con Cita
  #2  
Antiguo 03-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
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:
Código:
 
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?
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #3  
Antiguo 03-10-2003
ElCherchu ElCherchu is offline
Miembro
 
Registrado: may 2003
Posts: 76
Poder: 22
ElCherchu Va por buen camino
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...
Responder Con Cita
  #4  
Antiguo 03-10-2003
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
¿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:

Código:
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
Responder Con Cita
  #5  
Antiguo 09-10-2003
ElCherchu ElCherchu is offline
Miembro
 
Registrado: may 2003
Posts: 76
Poder: 22
ElCherchu Va por buen camino
Gracias a todos!!

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

Gracias por todo...
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 02:59:14.


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