Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-02-2007
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 21
Alexis De la Cr Va por buen camino
Yo tengo una Aplicacion MDI con Login y me funciona Pefectamente.. Mis conocimientos son muy basicos pero bueno intentare aportarte algo...

tengo un form principal MDI madre y un monton de MDI Hijas... ahora bien... el form del login no es MDI, es del tipo normal, y lo muestro a traves del evento onshow del form principal.. No se si sea exactamente lo que andas buscando, pero creo que debe seguir el mismo procedimiento.

Saludos
Responder Con Cita
  #2  
Antiguo 27-02-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 24
ixMike Va por buen camino
Perdón si te causé confusión. El frmMain (FormPrincipal) es el MDI que contiene a las hijas, y no tiene nada que ver con el FLogin.


Aquí está el código. Es del archivo "frmMain.pas", que es donde se crea la SplashScreen (no en el DPR, como te había dicho; eso lo hago en otro programa), la ventana Login y se inicia el programa.

Código Delphi [-]
unit frmMain;
...
var
  FFondo: TFFondo;
  Usuario: String;
 
implementation
...
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Usuario:='';
FSplash:=TFSplash.Create(Self);
FSplash.Show;
//EAccion es un TLabel que indica qué está haciendo el programa
//Barra es un TGauge que indica el porcentaje de la carga
FSplash.EAccion.Caption:='Inicializando...';
...
FSplash.Barra.Progress:=FSplash.barra.Progress+1;
FSplash.Repaint;
...
FSplash.EAccion.Caption:='Autorizando...';
FSplash.Barra.Progress:=FSplash.barra.Progress+1;
FSplash.Repaint;
FLogin:=TFLogin.Create(Self);
//Al pulsar el boton Aceptar hace las comprobaciones, y si usuario y contraseña
//son correctos asigna a ModalResult mrOk, sino sale un mensaje. Hay otro botón, que
//sirve para salir del programa
If FLogin.ShowModal=mrOk then
  begin
  Usuario:=FLogin.CUsuario.Text;
  ...
  end;
FLogin.Free;
FSplash.EAccion.Caption:='Leyendo datos...';
FSplash.Barra.Progress:=FSplash.Barra.Progress+1;
FSplash.Repaint;
...
FSplash.Free;
...
end;
...
Y una vez iniciado el programa, para cambiar de usuario:
Código Delphi [-]
Procedure TfrmMain.mCambiarUsuario(Sender: TObject);
begin
... //Guardar todos los datos
Visible:=False;
FLogin:=TFLogin.Create(Self);
FLogin.CUsuario.Text:=Usuario; //Un toque de elegancia, recuerda el último usuario
Usuario:=''; //Por si las moscas
FLogin.ShowModal;
If FLogin.ModalResult:=mrOk
  begin
  Usuario:=FLogin.CUsuario.Text;
  ...
  end;
end;


Espero que te sea de ayuda.

Salu2


P.D:
Cita:
Empezado por BlackDaemon
PD me gustaría mucho que me envies el código
Aquí preferimos poner el código para que todo el mundo lo vea. Además sería una tontería enviarte todo el código de mi programa, con el ejemplo que aquí te he puesto hay suficiente (pues en el proceso de carga hace muchísimas cosas).

Última edición por ixMike fecha: 27-02-2007 a las 20:27:32.
Responder Con Cita
  #3  
Antiguo 27-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Estaís hablando de MDI pero no soys muy específicos. Aclaremos las cosas, hablemos de la propiedad FormStyle de cada uno.


Hay que comentar un efecto que hace usar una filosofía u otra:

1- Quiero mostrar la ventana de login, y si no valida al usuario, que se salga del programa, si lo valida correctamente, después y solo después, se abra la forma principal:

Forma de hacerlo: (la forma de pepon386) Project -> View Source y modificarlo según gustes, el orden de creación y visualización será este:
El SplashScreen con barra de progreso, fsNormal
La ventana de login fsNormal
La ventana principal fsMDIFORM
Las ventanas hijas fsMdiChild

2- Quiero que primero se abra la ventana mdiform (la principal y madre) y después... dentro de esa ventana, que se muestre la de login.
Esto implica cambiar el orden de creación de las ventanas y su estilo:

La forma de hacerlo de ixMike:

El SplashScreen con barra de progreso, fsNormal
La ventana principal fsMDIFORM
La ventana de login fsMdiChild
Las ventanas hijas fsMdiChild

Personalmente me gusta más la forma 1, porque si el usuario no se valida, directamente cierras la aplicación y no se demora en crear más ventanas.

Normalmente las SplashScreen se muestran mientras se está creando las demás ventanas, ponerle un Timer para ver bonita una imagen y hacer esperar al usuario no me gusta nada (opinión personal, queda claro ¿no?), sobre todo si se trata de un programa serio (facturación, stock, etc...) Si es un Freeware... pues vale, que se fastidie viendo la imagen 3 segundos .

La ventana principal suele tener mucho código asociado, dependiendo del usuario que se conecte mostrar u ocultar menús, preparar la conexión con la base de datos, etc. Lo que quiero decir es que quizás sea la ventana que más tiempo tarde en crearse, por tanto, sería lógico mostrar el SplashScreen antes de empezar a crear dicha ventana y no hacerlo al revés.

De todas formas y como ya he dicho es mi opinión, y por supuesto el foro está para eso, aportemos todos nuestras ideas y que después cada uno use la que le guste más, que no quiere decir que sea peor o mejor, es simplemente su estilo propio .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 27-02-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 24
ixMike Va por buen camino
Cita:
Empezado por Lepe
La forma de hacerlo de ixMike:

El SplashScreen con barra de progreso, fsNormal
La ventana principal fsMDIFORM
La ventana de login fsMdiChild
Las ventanas hijas fsMdiChild
Saludos
Lo siento, Lepe, te has equivocado, mi forma es:
El SplashScreen con barra de progreso, fsNormal
La ventana principal fsMDIFORM
La ventana de login fsNormal
Las ventanas hijas fsMdiChild

Porque si no la ventana login no podría ser llamada de forma Modal (que yo sepa)

Cita:
Empezado por Lepe
La ventana principal suele tener mucho código asociado, dependiendo del usuario que se conecte mostrar u ocultar menús, preparar la conexión con la base de datos, etc. Lo que quiero decir es que quizás sea la ventana que más tiempo tarde en crearse, por tanto, sería lógico mostrar el SplashScreen antes de empezar a crear dicha ventana y no hacerlo al revés.
Tampoco es cierto. Si lo primero que hace la ventana principal es crear la Splash (como es el caso de mi ejemplo) primero se muestra la Splash y después se ejecuta todo el código asociado (comprobaciones, cargar bases de datos y archivos...) mientras el proceso se muestra en la Splash


En lo que sí tenías razón era en que no hemos sido muy específicos.

En mi ejemplo, las ventanas hijas se crean tras hacer un Login correcto (la demora es mínima). Y si se quiere cambiar de usuario, antes de mostrar otra vez el Login se cierran todas las ventanas hijas.
Responder Con Cita
  #5  
Antiguo 27-02-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 24
ixMike Va por buen camino
El funcionamiento es este:

-Se crea la FormPrincipal (MDIForm) pero antes de que se muestre crea la SplasScreen (fsNormal) que sí se muestra.
-Cuando la Splash ya ha acabado (solo queda el paso de iniciar usuario) entonces se muestra la ventana Login (Modal, fsNormal), antes de que se muestre la FormPrincipal.
-Si el Login es correcto, se cierran la Splash y la Login, y se muestra la principal; si no es correcto, tan solo te avisa de que no es correcto con un ShowMessage y puedes seguir intentándolo. Si pulsas el botón "Salir del programa" se cierra la Login, la Splash (si está abierta) y (tras un parpadeo producido porque se muestra la FormPrincipal) el programa se cierra.

Si no queda claro (aún) colgaré un proyecto de prueba.

Salu2
Responder Con Cita
  #6  
Antiguo 28-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por ixMike
Porque si no la ventana login no podría ser llamada de forma Modal (que yo sepa)
Cierto, muy cierto. Además hay otro error, si la ventana de login es mdiChild, se podría acceder al menú del MDIFORM, así como a las posibles barras de herramientas, y deshabilitarlo todo es un engorro, es mejor como has dicho.

Cita:
Empezado por ixMike
Tampoco es cierto. Si lo primero que hace la ventana principal es crear la Splash (como es el caso de mi ejemplo) primero se muestra la Splash y después se ejecuta todo el código asociado (comprobaciones, cargar bases de datos y archivos...) mientras el proceso se muestra en la Splash
Ok. En realidad el evento Oncreate ocurre después que la ventana se haya creado al completo, menús, actionList, etc... aunque... bien pensado... estoy poniendo pegas simplemente por ponerlas .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 28-02-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Bueno como dice Lepe nunca hablaron de cuales form con hijas y cuales padres.. y es lo que yo necesitaba :S
con el post de Lepe me aclaró un poco el problema que tengo y como el dice la 1ra opción me gusta mas y la veo mejor.. perooooo!! Hay un problema.. que ya intenté hacerlo así y tampoco pude, osea modificar el fichero del proyecto, bueno pero lo que tengo en este monento es esto.
( el orden que pongo es el orden en que se crean los form )

1.- FrmSplash --> fsNormal
2.- DataModule --> contiene los componetes para conectarse a la Base de Datos y hacer los querys para el login
3.- FrmLogin --> fsNormal
4.- FrmPrincipal --> fsMDIform
5.- FrmHija --> fsMDIChild

Bueno ahora solo me queda modificar mi PROYECTO pero no se como .. lo intenté de várias formas como indican aquí en este foro pero con malos resultados.. y así decidí mantenerlo como esta ahora para que me puedan dar mejores ideas..

Este es mi Proyecto.-


Código Delphi [-]
program ConStock;

uses
  Forms,
  Splash in 'Splash.pas' {FrmSplash},
  DataModule in 'DataModule.pas' {DM: TDataModule},
  Login in 'Login.pas' {FrmLogin},
  Principal in 'Principal.pas' {FrmPrincipal},
  Hija in 'Hija.pas' {FrmHija};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TFrmSplash, FrmSplash);
  Application.CreateForm(TDM, DM);
  Application.CreateForm(TFrmLogin, FrmLogin);
  Application.CreateForm(TFrmPrincipal, FrmPrincipal);
  Application.Run;
end.

BUeno ahora solo necesito saber como modificar mi PROYECTO y luego que codigo poner en cada evento del Form necesario
ahhh y mi FrmLogin tiene 2 botones.. uno ACEPTAR que valida el user y pass con la Base de Datos y el otro CERRAR que cierra la aplicación

saludos y gracias por las ayudas

Última edición por BlackDaemon fecha: 28-02-2007 a las 02:45:02.
Responder Con Cita
  #8  
Antiguo 28-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Aqui se trata el mismo tema.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema con el icono de la aplicacion Choclito Varios 3 29-07-2006 20:22:09
Problema con Aplicacion MDI Thales OOP 7 19-08-2005 15:31:07
Problema con mi aplicación JerS Varios 2 18-07-2005 16:33:51
Aplicacion Antes Del Login De Windows omardelahoz Varios 2 22-06-2004 16:29:48
Problema con aplicacion MDI wallesis OOP 5 03-01-2004 11:17:28


La franja horaria es GMT +2. Ahora son las 01:57:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi