Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Que salte una ventana a los 10 segundos (https://www.clubdelphi.com/foros/showthread.php?t=22084)

gontxalo 06-06-2005 16:21:55

Que salte una ventana a los 10 segundos
 
Hola.
En una aplicación vcl quiero que al ejecutarse, salte el form1, pero que el form2 salte encima del 1 y que el usuario no pueda manejar el form1 hasta que cierre el dos. Para ello he puesto el siguiente code:

procedure TForm1.FormActivate(Sender: TObject);
begin
Form2.ShowModal;
end;

Funciona.

Pero quiero que un Form3 salte a los 10 segundos de que el Form 1 esté abierto. Esto como lo puedo hacer?

Neftali [Germán.Estévez] 06-06-2005 16:41:46

Añade al form1 un Timer con Interval=10000 y en el evento OnTimer pon lo siguiente:

Código Delphi [-]
   Form3.ShowModal;
   Timer1.Enabled := False;

gontxalo 06-06-2005 16:51:31

Como pongo un timer al form1
 
Hola Neftali.
Como añado un timer con intervalo 10000 al form1 ?

Y en los eventos del form1, no encuentro ninguno que sea OnTimer para ponerle el code:
Form3.ShowModal;
Timer1.Enabled := False;
Lo siento pero soy nuevo.
Gracias.

fidel 06-06-2005 17:08:55

Hola:

El timer es un componente que tienes tu que añadir, está en la pestaña System.
El intervalo es una propiedad del TTimer, la propiedad Interval, le pones ese valor y listo.

Un saludo.

gontxalo 06-06-2005 18:02:03

Gracias. Ya lo tengo.
 
Hola
Perfecto
Ya lo tengo
Funciona.
Te da una alegría cuando van funcionando las cosas...:)

gontxalo 06-06-2005 18:09:20

Así salta cada 10 segundos. Y para que sea una vez sólo?
 
Una cosa
Lo que me he fijado es que así salta esta ventana cada 10 segundos.
Pero si lo que quiero es que salte sólo una vez a los 10 segundos de que se ejecute la aplicación?
Como lo hago?

gontxalo 06-06-2005 18:20:35

Ya esta
 
Ni caso.
Se me olvidó poner debajo:
Timer1.Enabled := False;

ya funciona correctamente.
Gracias:)

gontxalo 06-06-2005 20:36:07

Con ShowModal da error
 
Hola
Lo pongo asi:
Form3.ShowModal;
Timer1.Enabled := False;
Y al run me da el error:
exception class EInvalid Operation with message 'Cannot make a visible window modal'

Y si en vez de ShowModal pongo Show, funciona pero lo que yo quiero es que la ventana que salga a los 10 segundos tengan que cerrarse antes de poder seguir haciendo algo en el form de abajo. Como lo puedo hacer?

Gracias.

vtdeleon 07-06-2005 01:57:10

Saludos

Chequea si en la propiedad FormStyle del Form3 estA en fsNormal, si no estA asi ponlo

dec 07-06-2005 02:06:37

Hola,

Lo que ocurre es que se está tratando de mostrar de forma "modal" un formulario que está ya mostrándose, sea de forma "modal" o no. ¿No es eso?

gontxalo 07-06-2005 13:16:08

Si, está en fsNormal
 
Hola
Si está en formStyle: fsNormal, y no funciona.

Hola Dec.
No, no se está mostrando todavía el form3.

Lo que quiero es que cuando corre la aplicación salta el form1. A los 5 segundos salte el form2 y a los 10 salte el form3.

Para ello en el form1 pongo dos timer. El primero llamo al form 2 a los 5 segundos, y en el timer2 llamo al form3 a los 10 segundos.

El form2 quiero que los usuarios puedan manejar el form1 o form2 independientemente. Para ello lo pongo de forma Show:
Form2.Show;
Timer1.Enabled := False; funciona.

El form3 cuando salte quiero que los usuarios no puedan manejar el form1 hasta que cierren la ventana del form3, para ello lo pongo en ShowModal:
Form3.ShowModal;
Timer2.Enabled := False; no funciona, me salta el error:
exception class EInvalid Operation with message 'Cannot make a visible window modal'

Pero si lo pongo igual que el form2 si funciona, es decir los dos en show:
Form.3Show;
Timer2.Enabled := False;

Pero así cuando salta la ventana del form3, los usuarios pueden acceder al form1 sin cerrar la ventana del form3.

Gracias

fidel 07-06-2005 16:29:10

Hola:

Dices que no se está mostrando el form3 pero el mensaje según mi no muy buen inglés parece que dice lo contrario: 'Cannot make a visible window modal' -> No puedo hacer modal una ventana visible

¿Como creas el form3?. Si lo tienes en Auto-create forms pásalo a Available Forms y créalo manualmente antes de mostrarlo en ShowModal, a ver si funciona.

Un saludo.

gontxalo 07-06-2005 20:01:01

Tengo todos los form en autocreate
 
Hola
Tengo todos los form en autocreate. Al cambiarlo a available me salta otro erros y tampoco puedo llamarlo desde el botón.
Cuando desde el form1 llamo al form3 con un boton en forma modal:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form3.ShowModal;
end;
Me funciona correctamente. Salta el form3 y hasta que no cierro el form3 no puedo actuar sobre el form1.

Hay alguna otra forma de poderlo hacer?

Es decir que al ejecutar la aplicación salte el Form1 y encima el form3 y que no se pueda actuar sobre el form1 hasta que se cierre el form3.

El form3 es de registro de usuarios. Nombre y password. Y hasta que no reconozca los datos nombre y usuario no se cierra el form3 y no se pueda actuar sobre el form1 ?

Gracias

vtdeleon 07-06-2005 23:40:19

Saludos
1) El form1 ponlo en AutoCreate y los demas en Availables
2) Crear el form3:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form3:=tform3.create(self); 
  Form3.ShowModal;
end;
3) Todos los form en FormStyle:=fsNormal;

gontxalo 08-06-2005 00:57:42

Ya esta hecho, hay un error en timer2
 
Hola
Ya he puesto todos los form menos el 1 en available.
He puesto el code para llamar a los otros forms desde botones y funciona.

Pero....

Lo que me sigue sin funcionar es el timer para llamar al form3. Si salta y si es en modal por lo que hasta que no se cierra no se puede manejar el form1. Pero me salta no una sino indefinidamente. Con Show salta una vez, con ShowModal salta indefinidamente, uno encima del otro.

Con el botón funciona:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form3 :=TForm3.Create(self);
Form3.ShowModal;
end;

Timer 1 con show funciona:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form9 :=TForm9.Create (self);
Form9.Show;
Timer1.Enabled :=False;
end;

Timer 2 con showmodal salta el form3 una vez encima de si mismo indefinidamente:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Form3:=TForm3.Create (self);
Form3.ShowModal;
Timer2.Enabled :=False;
end;

Que puedo hacer para que el form3 salte sólo una vez?

Gracias

fidel 08-06-2005 01:10:27

Hola:

Yo creo que vtdleon tiene razón, el form1 ponlo en AutoCreate y los demas en Availables, no se que otro tipo de error te puede dar con eso.

Lo que intentas hacer quizás se pueda con un solo form, en él pones un TPageControl con tres páginas (TTabSheet). Para empezar solo TabVisible a true a la primera página y las otras dos False para que no se puedan ver. Al dar al botón que dices se puede hacer visible también la solapa de la segunda con lo que puedes entrar en las dos cuando quieras, pero cuando des al botón para ir a la tercera te sitúas en ella y ocultas todas las solapas y así solo podrás estar en la tercera, cuando salgas de la tercera visualizas las solapas de la 1 y la 2.

Resumiendo, que vas mostrando u ocultado pestañas según te convenga dejar o no dejar entrar en la página.

Un saludo.

gontxalo 08-06-2005 01:38:33

El error es que salta el form3 con timer2 indefinidamente
 
Hola
Gracias por tu idea pero es que la aplicación al final tendrá 10 forms y me cuadra mas de la otra forma.

Lo único es que me salta indefinidamente el form3. No sólo una vez.

Gracias.

vtdeleon 08-06-2005 02:19:00

Saludos.

Creo saber por que te sale uno arriba de otro.
Cuando llamas a un formulario en forma MODAL, el proceso que llamo la forma se detiene hasta que cierres el formulario modal
Por Ej:
Código Delphi [-]
//Timer 1 con show funciona:
      procedure TForm1.Timer1Timer(Sender: TObject);
      begin
     Form9 :=TForm9.Create(self);
      Form9.Showmodal; //Se detiene aqui y no da paso a que se deshabilite el Timer, hasta que éste se cierre.
      Timer1.Enabled :=False;//Cuando cierre la forma modal, esta linea se ejecuta
      end;

Pon este codigo.
Código Delphi [-]
//Timer 1 con show funciona:
     procedure TForm1.Timer1Timer(Sender: TObject);
     begin
     Timer1.Enabled :=False;
     Form9 :=TForm9.Create(self);
     Form9.Showmodal;
     end;

Suerte

gontxalo 08-06-2005 09:47:49

perfecto-ya está funcionando
 
;) Ya está funcionando correctamente.
Saltan las dos ventanas una show y otre showmodal y una vez.

Perfecto ese era el fallo. No daba paso a cerrar el timer y la línea se ejecutaba todo el rato.

Solucionado
Gracias.;)


La franja horaria es GMT +2. Ahora son las 21:25:31.

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