FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Aplicación MDI con LOGIN ( problema )
Buenas .. tengo que hacer un sistema de facturación y lo tenía bién y sin problemas hasta que decidí hacer la aplicación en MDI..
Bueno mi problema es que tengo esto antes de mostrar mi formPricipal. 1.- Un FormLoader -> que es el que se crea primero .. este tiene un ProgresBar y un timer algo para darle mas alegancia al programa además cumple la función de mostrar una imagén y el ProgresBar mientras se realiza la conexión con la Base de datos en MySQL .. luego de eso viene. 2.- un FormLogin -> este aparece luego de que termina de cargar el ProgresBar y es un sistema de login que da paso al FormPricipal.. 3.- el FormPrincipal -> este es el que contiene todo el menú y el que contendrá TODOS los demás form de la aplicación.. Bueno antes lo tenía todo perfecto.. pero ahora con los MDI me da problemas. Ahora lo que hice fué esto: hacer mi FormPrincipal la ventana "madre" y las demás que se abrirán en ella serán las "hijas" pero al momento de abrir una fentana "hija" me da este error Cannot create form. No MDI forms are currently active. Por lo que leí en este foro que otros usuarios tuvieron este problema es que no se puede crear la ventana hija por que el Form que se crea primero .. en mi caso sería el FormLoader no tiene la propiedad "FormStyle" en : fsMDIform y es algo lógico que me de ese error... ahora el problema esta en que por mas que leí no logré entender como resolver este problema.. osea tener unos 2 forms antes del "fsMDIform" Alguna idea ?? mas bién como podría hacer eso... ??? y si, ya miré el ejemplo de dec pero no logré entenderlo por que mis conocimientos son bajos en delphi Bueno espero alguna respuesta con la manera de hacer lo que quiero de la forma "correcta" saludos y gracias por leer semejante post xDD PD cualquier duda me lo preguntan que estaré todo el día conectado xD |
#2
|
||||
|
||||
Bueno, hace tiempo hice una aplicación exactamente igual (en la estructura). El funcionamiento era el siguiente:
1º un FormLoader (yo los llamo SplashScreen), con su imagen y su barra de progreso (aunque eso del Timer pienso que es una chapucilla, te recomiendo que busques en el foro algo sobre las SplashScreen, que de eso ya se ha hablado mucho). 2º en segundo lugar se creaba el FormPrincipal, que contenía a todas las hijas. Pero con la propiedad Visible en False. 3º En el evento OnCreate del FormPrincipal hago la llamada a la ventana Login. 4º una vez el login es correcto se cierra la ventana login (que es Modal) y pongo la Visible del principal en True. Eso además me ayudó a hacer cambios de usuario. Me explico: tras hacer el primer login el programa lo utilizas, pero si querías cambiar de usuario pulsabas el correspondiente menú, volvía a poner el visible en false y llamaba otra vez a la ventana Login de forma Modal. Pero no se te ocurra ponerle un botón "cancelar", sino uno "Cerrar programa". Espero que te sirva de ayuda. Cuando lo hice tampoco tenía muchos conocimientos de programación. Si no te aclaras, dílo, y pondré aquí el código necesario (me pondré a buscarlo). Saludos a todo el foro |
#3
|
||||
|
||||
Hola... gracias por tu respuesta tan rápida, pero!! tu aplicación era MDI ??
por que no me dijiste que cual era el form que se creaba primero.. tampoco cual era el form madre o padre creo xDD bueno.. ya havía pensado en poner el formPrincipal en INVISIBLE pero quisiera que me muestres el código para poder darme una mejor idea ya que no puedo avanzar con la aplicación por que no esta lista esta parte.. Bueno espero me respondas.. y me aclares la duda.. saludos y gracias PD me gustaría mucho que me envies el código a koko [at] yashira.org o lowlifebob [at] gmail.com por que creo que aquí no se puede adjuntar mucho saludos PD el form de splashScreem que dices era ventana padre ?? hija ?? el sistema de login lo mismo ?? no logro entendér eso.. por que creo que no sep uede crear una ventana hija si el PRIMER form en crearse es normal.. mejor mándame el ejemplo xD Última edición por BlackDaemon fecha: 27-02-2007 a las 03:01:41. |
#4
|
|||
|
|||
Te adjunto un pequeño ejemplo de código fuente del proyecto:
|
#5
|
||||
|
||||
pepon386 lo siento pero no entendí nada tu ejemplo...
por que no dices que forms es el padre o cual los hijos.. además ahí por lo que veo no creas el form principal que contendrá a todos los hijos.. bueno soy nuevo en esto y tal véz por eso no entendí, de todas formas gracias saludos y a ver si me ayudan que la verdad intento de todos modos pero nada... no puedo :S |
#6
|
|||
|
|||
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 |
#7
|
||||
|
||||
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. Y una vez iniciado el programa, para cambiar de usuario:
Espero que te sea de ayuda. Salu2 P.D: Cita:
Última edición por ixMike fecha: 27-02-2007 a las 21:27:32. |
#8
|
||||
|
||||
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. |
#9
|
||||
|
||||
Cita:
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:
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. |
#10
|
||||
|
||||
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 |
#11
|
||||
|
||||
Cita:
Cita:
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#12
|
||||
|
||||
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.-
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 03:45:02. |
#14
|
||||
|
||||
Bueno, aquí va el programa de prueba (no tiene DataModule, pero si lo tuviera, pues después del Splash y antes del Login).
|
#15
|
||||
|
||||
ixMike, se te escapo una linea de codigo sin la cual el programa desaparece a lo David Copperfield . Se te olvido hacer Visible := TRUE al cambiar de usuario.
Aqui está corregido: |
#16
|
||||
|
||||
Bueno gracias a todos los que respondieron
a Lepe que siempre me aclara las dúdas y a ixMike por adjuntar su ejemplo que a mas de uno le servirá de mucha ayuda y al otro amigo por corregirlo saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
problema con el icono de la aplicacion | Choclito | Varios | 3 | 29-07-2006 21:22:09 |
Problema con Aplicacion MDI | Thales | OOP | 7 | 19-08-2005 16:31:07 |
Problema con mi aplicación | JerS | Varios | 2 | 18-07-2005 17:33:51 |
Aplicacion Antes Del Login De Windows | omardelahoz | Varios | 2 | 22-06-2004 17:29:48 |
Problema con aplicacion MDI | wallesis | OOP | 5 | 03-01-2004 12:17:28 |
|