PDA

Ver la Versión Completa : Super lio con los forms(gran problema)


Sandochan
24-06-2003, 05:29:33
Hola, tengo un gran problema, el cual lo voy a describir:

tengo una pantalla, (la de logueo) la cual la he puesto como Auto create, ahora lo que quiero es abrir otra pantalla y lo que hago es:

frmPrincipal.create(self);
frmPrincipal.showmodal;
close;

donde frmPrincipal es la pantalla que quiero abrir una vez qe le doy aceptar a la de logueo( la cual es la primera pantalla q se auto crea). pero como lo normal es al abrirse frmPrincipal se cierre la otra, no se puede. lo he intentado de varias maneras,

en el evento onshow del Principal hago
frmlogueo.close;
y lo que pasa es que se cierra toda la aplicacion

tiene algo que ver que sea autocreada?.

como hago para poder abrir la otra y cerrar la anterior
Muchas gracias

jachguate
24-06-2003, 06:27:38
No tiene que ver con que sea autocreate... pero por definición el primer form que creas con Application.CreateForm es el form principal de la aplicación... y al cerrarse, pues cierra la aplicación también.


Podes solucionar el problema editando el código del programa y cambiando el Application.CreateForm por un


MiForma := TMiForma.Create(Application);

o

MiForma := TMiForma.Create(nil);


Así, al cerrar la forma, pues no cerrará la aplicación.

Hasta luego.

;)

por cierto... te recomiendo tratar de utilizar un título mas adecuado, pues con los forms, regularmente todos tenemos lios... y con titulos como ese muchos se negarán siquiera a leer tus mensajes...

madman
24-06-2003, 09:15:10
Hola!

A lo ke leo... y explicando pokito más
Cuando creaste la aplicación usaste la primera form (Form1) que por default te da Delphi como la de LogON y despues agregaste otra form con la cual trabaja todo el programa (FormPrincipal).

Asi pues la form de LogON sigue siendo la form principal de toda la aplicacion y cuando la cierras, pues cierras tu programa.

Lo que yo uso para crear form's de LogON o Splash, esas que aparecen antes de la FormPrincipal. Es en el evento _OnShow de la FormPrincipal ponerle un FormSplash.ShowModal, asi me muestra primero la de Logeo (como tu le dices).


//Evento ONShow de la FormPrincipal
procedure TFormPrincipal.FormShow(Sender: TObject);
begin
FormSplash.ShowModal;
end;


Ya en la ventana de Splash validas la entrada del usuario.

Solo que tendrás que cambiar las form's para que la FormPrincipal kede como principal en la aplicación.

Te recomiendo que uses la primera form que te da Delphi como la principal y de ahi agregues las demas dependientes.

marto
25-06-2003, 02:24:47
Posteado originalmente por Sandochan
Hola, tengo un gran problema, el cual lo voy a describir:


frmPrincipal.create(self);
frmPrincipal.showmodal;
close;



Sólo un comentario al margen. Supongo que ese código no es exactamente el que se ejecuta ya que produciria una exceptión de accso a memoria.
frmPrincipal no es una classe, sino una referencia, que antes de instanciarse no apunta a nigun sitio a no ser que tambien este como autocreate, con lo cual tendrás una fuga de memoria importante. Para instnciar un form o cualquier otra classe en ejecución tienes que poner:

referencia := TMiClase.Create(Owner);

En el caso concreto de los forms tambien se puede usar:

CreateForm(TMiClase, Referencia);