Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   abrir y cerrar form2 desde form1 (https://www.clubdelphi.com/foros/showthread.php?t=83681)

aitorqrv 14-07-2013 14:31:22

abrir y cerrar form2 desde form1
 
Hola estoy intentando abrir y cerrar un form (form2) automáticamente.

Para abrir el form2 que ya he creado con anterioridad utilizo:
Código:

procedure TForm1.FormCreate(Sender: TObject);
begin
 TForm2.Create(Self).Show;

end;

Y para cerrarlo he intentado utilizar esto en el form2:
Código:

procedure TForm2.FormCreate(Sender: TObject);
begin
  Sleep(1000);
  form2.close;
end;

He buscado por internet otras alternativas de crear un form en tiempo de ejecución y de como cerrarlo pero no consigo cerrado. En el form2 he colocado un boton y al hacer un onclick si le pongo close; el form2 se cierra correctamente.

Estoy utilizando lazarus 1.0.10 para mac

Un saludo y muchas gracias.

Si quereis ver el código fuente lo tengo aquí:
Código:

https://docs.google.com/file/d/0B2ZO_lvYiBaUQ2doVVpsd1k4T0U/edit?usp=sharing

Casimiro Notevi 14-07-2013 14:51:52

No lo pongas en el oncreate, mejor prueba en el onactivate

pedrolazarus 14-07-2013 18:08:27

http://www.clubdelphi.com/foros/showthread.php?t=4336

ozsWizzard 15-07-2013 15:09:46

¿En el TForm2.Create donde el dices que el objeto se llama Form2? Distinto sería si usas Application.CreateForm...

pedrolazarus 15-07-2013 18:14:57

Prueba esto, a mi me funciono, tambien funciona con destroy en ves de free, esto lo colocas en el boton del formulario 1 o donde desees. al cerrar el form2 simplemente se libera, espero no estar equivocado.

Código:


    with Tform2.Create(Application) do
    try
      Show;
    finally
      free;
    end;


ozsWizzard 17-07-2013 11:50:33

Cita:

Empezado por pedrolazarus (Mensaje 463932)
Prueba esto, a mi me funciono, tambien funciona con destroy en ves de free, esto lo colocas en el boton del formulario 1 o donde desees. al cerrar el form2 simplemente se libera, espero no estar equivocado.

Código:


    with Tform2.Create(Application) do
    try
      Show;
    finally
      free;
    end;


Eso sería con Showmodal, no con show. Tal y como está ahí se abriría y cerraría el formulario de seguida.

pedrolazarus 17-07-2013 14:58:54

NO, se abre el formulario y funciona correctamente, luego al tu cerrarlo se libera, yo lo probe, ¿Tu lo probaste?

ecfisa 17-07-2013 16:34:55

Hola ozsWizzard.

Otra opción es usando un TTimer (pestaña System) en Form2.

Form1:
Código Delphi [-]
...
implementation

uses Unit2;

...

begin
  TForm2.ShowForm; 
end;    
...

Form2:
Código Delphi [-]
  
...
  TForm2 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  public
    class procedure ShowForm;
  end;              
...
implementation

procedure TForm2.FormCreate(Sender: TObject);
begin
  Timer1.Enabled  := False;
  Timer1.Interval := 2000;  // milisegundos
  Timer1.Enabled  := True;
end;

class procedure TForm2.ShowForm;
begin
  if not Assigned(Form2) then
    Form2 := TForm2.Create(nil);
  Form2.Show;  // o ShowModal
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
  Close;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  Form2 := nil;
end;

Saludos. :)

ozsWizzard 18-07-2013 09:58:31

Cita:

Empezado por pedrolazarus (Mensaje 464007)
NO, se abre el formulario y funciona correctamente, luego al tu cerrarlo se libera, yo lo probe, ¿Tu lo probaste?

No me hacía falta probarlo para saber que tengo razón, aún así, lo he probado una vez más para comprobar que tengo yo razón.

El Show muestra el formulario y continua la ejecución, de toda la vida. El Showmodal es la instrucción que hasta que no "acabes" con el formulario mostrado, no devuelve la ejecución a donde se ha mostrado el formulario.

Ahora que lo he probado, a pesar de saber que tengo razón, pruébalo tú ;)

ozsWizzard 18-07-2013 09:59:29

Cita:

Empezado por ecfisa (Mensaje 464011)
Hola ozsWizzard.

Yo no he preguntado nada pero gracias igualmente, jejeje :D

ecfisa 18-07-2013 14:45:57

Cita:

Empezado por ozsWizzard (Mensaje 464060)
Yo no he preguntado nada pero gracias igualmente, jejeje :D

Es cierto...:D, perdón por el despiste :o

Saludos. :)

pedrolazarus 18-07-2013 15:41:39

Cita:

Empezado por ozsWizzard (Mensaje 464059)
No me hacía falta probarlo para saber que tengo razón, aún así, lo he probado una vez más para comprobar que tengo yo razón.

El Show muestra el formulario y continua la ejecución, de toda la vida. El Showmodal es la instrucción que hasta que no "acabes" con el formulario mostrado, no devuelve la ejecución a donde se ha mostrado el formulario.

Ahora que lo he probado, a pesar de saber que tengo razón, pruébalo tú ;)


si lo siento, lo tenia era en modal.

aitorqrv 05-09-2013 22:14:16

Hola perdón por la demora pero he tenido problemas técnicos y vacaciones de por medio...

He seguido lo que habéis ido comentando a lo largo de este hilo, pero no consigo echarlo andar, no se si alguno de vosotros podría subir algún lado el codigofuente completo para poder analizarlo y compararlo con lo que yo estoy haciendo y ver cual es mi error o tomarlo como referencia.

Gracias, un saludo.

ecfisa 06-09-2013 03:59:43

1 Archivos Adjunto(s)
Cita:

Empezado por aitorqrv (Mensaje 466485)
Hola perdón por la demora pero he tenido problemas técnicos y vacaciones de por medio...

He seguido lo que habéis ido comentando a lo largo de este hilo, pero no consigo echarlo andar, no se si alguno de vosotros podría subir algún lado el codigofuente completo para poder analizarlo y compararlo con lo que yo estoy haciendo y ver cual es mi error o tomarlo como referencia.

Gracias, un saludo.

Hola aitorqrv.


Saludos :)

aitorqrv 07-09-2013 22:34:09

Muchas gracias por el fichero, lo acabo de compilar y probar y me funciona correctamente. Ahora lo tengo que analizar y ver donde esta mi error.

Un saludo.

Bobrcl 20-12-2013 21:11:05

Muchas gracias, estaba buscando como abrir una ventana para hacer login, y este foro me dió muchas luces. elegí utilizar ShowModal.


La franja horaria es GMT +2. Ahora son las 07:18:11.

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