Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Abrir la misma ventana varias veces (https://www.clubdelphi.com/foros/showthread.php?t=49778)

subzero 30-10-2007 05:59:00

Abrir la misma ventana varias veces
 
Hola!!!

cómo lo dice el titulo de mi mensaje me gustaria conocer como se pueden abrir la misma ventana varias veces en tiempo de ejecución, siendo una independiente de la otra.


En otras palabras la idea sería abrir la ventana a tantas veces como el usuario lo desee.

Gracias

dec 30-10-2007 06:48:15

Hola,

Depende de lo que quieras conseguir, pero, una forma simple puede esta:

Código Delphi [-]
uses
  UOtherForm;

procedure TMainFrm.ShowOtherForm(Sender: TObject);
begin
  TOtherForm.Create(Self).Show();
end;

Lepe 30-10-2007 11:37:16

Otra forma más:
Código Delphi [-]
procedure TForm1.Button1Click(...)
var OF :TOtherForm;
begin
  OF := tOtherForm.Create(Application);
  OF.Show;
  OF.lo que sea ;
end;

El punto es usar una variable local "OF", dentro de la rutina puedes usarla para lo que quieras. Cuando salga del procedimiento, se pierde la variable OF, pero la ventana tendrá su ciclo de vida normal.

Si necesitas buscar alguna ventana, consulta el objeto "Screen" de delphi, donde se enumeran todas las ventanas creadas de tu aplicación.

Saludos

dec 30-10-2007 13:34:55

Hola,

Cita:

Empezado por Lepe
El punto es usar una variable local "OF", dentro de la rutina puedes usarla para lo que quieras.

Pero, sabes que también puede hacerse sin usar variable alguna, gracias a la magia del "with" de Delphi:

Código Delphi [-]
  with TOtherForm.Create(Self) do
  begin
    Top := 10;
    Left := 10;
    Show();
  end;

Pero, vamos, que, la magia del "with" llega hasta donde llega. :)

ixMike 30-10-2007 13:51:46

Hola, subzero.

¿Cuántas ventanas quieres? ¿10, 100?

Código Delphi [-]
var
  n: integer;
begin
  for n:=1 to 10 do
   with TOtraVentana.Create(Self) do
     begin
     Caption:='Ventana '+IntToStr(n);
     Left:=10*n;
     Top:=10*n;
     Show;
     end;
end;

Pero tengo una duda: para liberarlas de la memoria basta con pulsar la X, pero, ¿y si las quiero eliminar por código, es suficiente llamar al método Close, o hay que hacer algo más?

Saludos.

dec 30-10-2007 14:24:57

Hola,

Podrías buscar un formulario partiendo de "Screen.Forms", empero,... dándole un padre, como se da a los formularios, cuando el padre se libere se encargará de hacer lo propio con sus hijos. Pero, vamos,... como dije al principio, depende de cómo se vea el asunto, según lo que quiera conseguirse, podría optarse por varias soluciones, estoy seguro. :)

Lepe 30-10-2007 16:04:35

Código Delphi [-]
procedure TForm1.Button1(click)
var
   with TOtraVentana.Create(Self) do

Al crear la ventana así, estás diciendo que el dueño es "Self", y es equivalente a decir que será la ventana donde está el botón. Al cerrar la ventana de tipo TForm1, se cerrará todas las ventanas que has creado en ese bucle for.


También puedes crear la ventana así:
Código Delphi [-]
procedure TForm1.Button1(click)
var
   with TOtraVentana.Create(nil) do
En este caso asegúrate de poner action := cafree; en el evento OnClose de TOtraVentana, al cerrarla, se libera de RAM. En este caso, llamando por código al método Close, también se libera de RAM.

Por cierto dec, en tu mensaje anterior has dicho "padre" (que podría confundirse con la propiedad Parent), estoy seguro que has querido decir "dueño", (del parámetro AOwner).

Saludos

dec 30-10-2007 16:05:43

Hola,

Sí; llevas razón Lepe. Debería haber dicho "dueño" y no "padre", que no es lo mismo. :)

subzero 30-10-2007 20:05:27

Gracias a todos... tan pronto como pueda voy a revisar... gracias por colaborarme.


La franja horaria es GMT +2. Ahora son las 01:24:59.

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