Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2004
Avatar de edgusano
edgusano edgusano is offline
Miembro
 
Registrado: abr 2004
Ubicación: Medellin Colombia
Posts: 180
Poder: 21
edgusano Va por buen camino
Question Ayuda Con App Mdi

Hola alguien me podria ayudar.

Tengo una APP MDI y quisiera saber como hago para que un formulario no se me abra dos veces o mas es decir, que si ya el form ya esta abierto que lo active, en vez de crearme otra instancia de ese form.
__________________
Optimus Prime
Responder Con Cita
  #2  
Antiguo 12-07-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Tienes que pensar que un formulario es un objeto como cualquier otro, ¿Cómo harías para que un objeto no cree mas de una vez?

La primer solución básica es usando banderas, simplemente teniendo una bandera para saber si creamos un objeto o no, pero si este objeto se lo asignamos a una variable... ¿Para que vamos a tener otra?, por eso podríamos extender este concepto, y podríamos preguntar si la variable donde vamos a cargar este formulario esta asignada o no, y en este caso tenemos que tener la precaución que al liberarse limpiar el contenido de la variable.
Código Delphi [-]
procedure TfrmMDI.Menu1Click(Sender: TObject);
begin
  if frmChild = Nil Then
    frmChild := TfrmChild.Create(Self);
end;
Código Delphi [-]
procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frmChild := Nil;
end;

Ahora, muchos programadores no utilizamos la variable global que nos crea automáticamente el IDE al crear un TForm, simplemente porque podríamos tener mas de una instancia del formulario (que este no es el caso), o porque no vamos a darle utilidad porque nunca haremos referencia al formulario desde fuera de la implementación de la clase, o simplemente por cuestión de gustos. En este caso podríamos implementar otras soluciones, de las cuales te voy a comentar dos, la primera es desactivar el control que usa el usuario para crear el formulario, simplemente:
Código Delphi [-]
procedure TfrmMDI.Menu1Click(Sender: TObject);
begin
  TfrmChild.Create(Self);
  Menu1.Enabled := False;
end;
Código Delphi [-]
procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frmMDI.Menu1.Enabled := True;
end;

Otra opción, puede ser, buscar si nuestro formulario ha sido creado previamente en la colección de formularios del objeto Screen:

Código Delphi [-]
function CheckForm(AFormClass: TFormClass): boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to Screen.FormCount -1 do
    if Screen.Forms[i] is AFormClass Then
    begin
      Result := True;
      Screen.Forms[i].BringToFront;
      Break;
    end;
end;

procedure TfrmMDI.Menu1Click(Sender: TObject);
begin
  if not CheckForm(TfrmChild) then
    TfrmChild.Create(Self);
end;

¿Has visto algo nuevo?… ¿no es simplemente el mismo trato que se le da a cualquier objeto?

Saludos!, espero que te sea de utilidad
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 15-07-2004
Avatar de edgusano
edgusano edgusano is offline
Miembro
 
Registrado: abr 2004
Ubicación: Medellin Colombia
Posts: 180
Poder: 21
edgusano Va por buen camino
gracias

Hombre muchas gracias, estaba bastante enredado con es acuestion, anotate un punto.
__________________
Optimus Prime
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 18:46:13.


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