Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 12/07/2004
edgusano's Avatar
edgusano edgusano is offline
Miembro
 
Join Date: Apr 2004
Location: Medellin Colombia
Posts: 180
Poder: 23
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
Reply With Quote
  #2  
Old 12/07/2004
delphi.com.ar's Avatar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Join Date: May 2003
Location: 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.
Reply With Quote
  #3  
Old 15/07/2004
edgusano's Avatar
edgusano edgusano is offline
Miembro
 
Join Date: Apr 2004
Location: Medellin Colombia
Posts: 180
Poder: 23
edgusano Va por buen camino
gracias

Hombre muchas gracias, estaba bastante enredado con es acuestion, anotate un punto.
__________________
Optimus Prime
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 23:07.


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