Ir al contenido


Foto

[RESUELTO] Saber si se ha creado un form


  • Por favor identifícate para responder
10 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 agosto 2010 - 01:13

Hola
Como puedo saber si se ha creado un form?.
Digamos que tengo este codigo que me crea el form2:


delphi
  1.   form2:=Tform2.Create(self);
  2.   try
  3.   form2.ShowModal;
  4.   finally
  5.   form2.Free;



Lo que qiuiero es saber si se ha creado.
Osea: Si se ha creado que no se vuelva a crear.
Como lo puedo saber o ver o identificar?.
Aparte de verlo por supuesto.... :D
Saludos
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 agosto 2010 - 01:32

Hola amigo



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   if not assigned(Form2) then
  4.   begin
  5.     form2:=Tform2.Create(self);
  6.     try
  7.       form2.ShowModal;
  8.     finally
  9.       form2.Free;
  10.     end;
  11.   end;
  12. end;



Salud OS
  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 agosto 2010 - 01:36

Hola
Muchas gracias amigo, estaba haciendolo asi:


delphi
  1.   if assign(Form2) = nil then
  2.   begin
  3.   Form2 := TForm2.create(self);
  4.   try
  5.       form2.ShowModal;
  6.     finally
  7.       form2.Free;
  8.     end;
  9.   end;


Y me decia que eran incompatibles.
Gracias. (y)
Saludos
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 agosto 2010 - 01:38

Hola
Muchas gracias amigo, estaba haciendolo asi:


delphi
  1.   if assign(Form2) = nil then
  2.   begin
  3.   Form2 := TForm2.create(self);
  4.   try
  5.       form2.ShowModal;
  6.     finally
  7.       form2.Free;
  8.     end;
  9.   end;


Y me decia que eran incompatibles.
Gracias. (y)
Saludos


Ah pues que bien que le sirvió, ponga usted el hilo como [RESUELTO] :)

Salud OS
  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 agosto 2010 - 01:51

Hola
Todavia tengo algo mas...
El codigo sirve, si esta creado no lo crea, pero si lo creo una vez luego no lo puedo volver a crear.
Esto es lo que tengo:


delphi
  1. if not assigned(Form3) then
  2.   begin
  3.   Form3:=TForm3.Create(self);
  4.   try
  5.   Form3.Show;
  6.   while Form3.Visible do
  7.   begin
  8.   For I:=1 to 10000 do
  9.   Begin
  10.   Application.ProcessMessages;
  11.     end;
  12.     end;
  13.     finally
  14.     Form3.Free;
  15.   end;


Lo que hace ese codigo es simple, se crea el form pero aun creado se puede acceder a cualquier otro form creado, como si fueran MDI.
Saludos
  • 0

#6 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 05 agosto 2010 - 02:00

En el evento onClose del formulario agrega esta linea:



delphi
  1. Action := caFree;


  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 agosto 2010 - 02:10

Hola
Gracias amigo pero no funciona, envia un error al querer volver a crearlo.
La solucion por lo menos parcial es asi:


delphi
  1. var  I  : integer;
  2. begin
  3.   if assigned(Form3) then
  4.   begin
  5.   Form3.Show;
  6.   end;
  7.  
  8.   if not assigned(Form3) then
  9.   begin
  10.   Form3:=TForm3.Create(self);
  11.   try
  12.   Form3.Show;
  13.   while Form3.Visible do
  14.   begin
  15.   For I:=1 to 10000 do
  16.   Begin
  17.   Application.ProcessMessages;
  18.     end;
  19.     end;
  20.     finally
  21.   //  Form3.Free;
  22.   end;
  23.  
  24. end;


Si se libera o destruye el form da error al querer crearlo otra vez, osea, como que lo mantiene en memoria para poder usarlo.
Me imagino que es parecido a crear los forms de golpe en el proyecto ya que se pueden llamar con un simple Show y no con un showModal.
Saludos
  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 agosto 2010 - 02:31

Hola
Este es el ejemplo que estaba haciendo.
Se crea cualquier form y se puede trabajar con el que sea, sin tener que cerrar o abrir forms que es lo que pasa con el ShowModal.
Saludos

Archivos adjuntos


  • 0

#9 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 05 agosto 2010 - 02:43

Hola
En el form1 en el boton CERRAR poner este codigo.


delphi
  1. procedure TForm1.Button3Click(Sender: TObject);
  2. var
  3.   i :Integer;
  4.   comp:TComponent;
  5. begin
  6.   for i := 1 to 100 do begin
  7.   comp := FindComponent('Form' + IntToStr(i));
  8.   if assigned(TForm(comp)) then
  9.   begin
  10.   TForm(comp).Close;
  11.   end;
  12.   end;
  13.   Close;
  14. end;


Este es para cerrar los forms que esten activos ya que si se quiere cerrar el form principal no se podra, se tendra que cerrar uno por uno los forms activos, con este codigo se cerraran todos.
Saludos
  • 0

#10 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 06 agosto 2010 - 05:07

Buenas,

Para comprobar si un formulario está o no creado yo uso este código



delphi
  1. function TMenuFrm.WindowsExist(aForm: TForm): Boolean;
  2. begin
  3.   Result := False;
  4.   if not Assigned(aForm) then Exit;
  5.  
  6.   Result := Self.FindComponent(aForm.Name) <> nil;
  7. end;



Un ejemplo de llamada



delphi
  1. procedure TMenuFrm.bInClick(Sender: TObject);
  2. begin
  3.   if WindowsExist(InFrm) then ActivateWindows(InFrm)
  4.   else
  5.   begin
  6.     InFrm := TInFrm.Create(Self);
  7.     InFrm.Show;
  8.   end;
  9. end;



La función ActivateWindows activa el formulario si existe



delphi
  1. procedure TMenuFrm.ActivateWindows(aForm: TForm);
  2. var
  3.   Comp: TComponent;
  4. begin
  5.   Comp := Self.FindComponent(aForm.Name);
  6.   if Comp is TForm then
  7.   begin
  8.     TForm(Comp).Show;
  9.     TForm(Comp).BringToFront;
  10.   end;
  11. end;



Espero te sirva

Nos leemos

  • 0

#11 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 06 agosto 2010 - 08:06

Aunque ya está resuelto quiero dar mi aporte  (y)

Para el caso de los formularios MDI yo uso el siguiente procedimiento, si el form está lo muestra y si no, lo crea



delphi
  1. procedure CreateMDI(Owner:TForm; BaseClass:TFormClass; FormVar:TForm);
  2. var
  3.   Found  :Boolean;
  4.   i      :integer;
  5.  
  6. begin
  7.   Found:=False;
  8.   For i:= 0 To Owner.MDIChildCount-1 Do
  9.     If Owner.MDIChildren[i] is BaseClass Then
  10.     Begin
  11.       Owner.MDIChildren[i].Show;
  12.       Found:=True;
  13.     End;
  14.   if not found then
  15.     Application.CreateForm(BaseClass, FormVar);
  16. end;


  • 0




IP.Board spam blocked by CleanTalk.