Ver Mensaje Individual
  #2  
Antiguo 03-02-2010
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Reputación: 17
look Va camino a la fama
Cita:
Empezado por jbautista Ver Mensaje
Hola que tal, bueno hace tiempo que trabajo con Forms creados en tiempo de ejecución, pero tratando de optimizar mi codigo he visto algunas formas de crear, mostrar y liberar Forms de diferentes maneras que me han causado un poco de confucion.

Lo que hago (y hasta el momento me ha funcionado) es lo siguiente:

Código Delphi [-]/* Desde un boton de un FormPrincipal creo y muestro nuevos Forms de la siguiente manera: */ procedure TForm_principal.FormatosClick(Sender: TObject); begin Application.CreateForm(TForm_Imp_Formato, Form_Imp_Formato); Form_Imp_Formato.Show; end; /* Al hacer lo anterior, obviamente quito la linea Application.CreateForm(...) del DPR. Y para liberarlo, lo hago desde el Evento OnClose del Form creado de la sig manera: */ procedure TForm_Imp_Formato.FormClose(Sender: TObject; var Action: TCloseAction); begin Release; end;


Bueno esto funciona bien al menos ahorita para lo que hago, ya que el FormPrincipal va a estar abierto un tiempo indefinido:

*Pueden abrir un FormX y cerrarlo.
*Abrir uno nuevo, FormY y dejarlo abierto.
*Volver a abrir el FormX.

Cuando creo un Form, deshabito el boton que lo crea y lo muestra, asi evito que lo vuelvan crear y mostrar una 2a vez.

Pero ya NO quiero Deshabilitar el boton, si no que si le vuelven a dar Click una 2a vez, valide:

if //ya esta creado y en Show
{
Poner el Focus en Form
}
else //SI no esta creado
{
Crearlo;
Show;
}

Mis dudas son las siguientes:

¿Quisiera saber si hay alguna manera mas optima de crear, mostrar y liberar Forms?.
¿Como se si un Form ya esta creado para hacer la validación que necesito?

De antemano gracias.




Código Delphi [-]

  /// este evento va en el boton de creacion del form
  Form1 := TForm1.Create(nil);
  if NOT Assigned(Form1) then //SI El form no esta creado
  Begin
     Form1 := TForm1.Create(nil);
  END
  ELSE;
  Form1.Show;

//// en el evento onclose del form que llamaste
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(Form1);
end;
__________________
all your base are belong to us
Responder Con Cita