Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #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.964
Poder: 29
delphi.com.ar Va camino a la fama
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
 



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 20:08:46.


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