FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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.... |
#2
|
|||
|
|||
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; 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" ;) |
#3
|
|||
|
|||
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... |
#4
|
||||
|
||||
¿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; // Saludos |
#5
|
|||
|
|||
Gracias a todos!!
El código que envió roman hace exactamente lo que quiero.. Gracias por todo... |
|
|
|