PDA

Ver la Versión Completa : Que salte una ventana a los 10 segundos


gontxalo
06-06-2005, 16:21:55
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:


Form3.ShowModal;
Timer1.Enabled := False;

gontxalo
06-06-2005, 16:51:31
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
Hola
Perfecto
Ya lo tengo
Funciona.
Te da una alegría cuando van funcionando las cosas...:)

gontxalo
06-06-2005, 18:09:20
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
Ni caso.
Se me olvidó poner debajo:
Timer1.Enabled := False;

ya funciona correctamente.
Gracias:)

gontxalo
06-06-2005, 20:36:07
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
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
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:
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
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
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:
//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.//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
;) 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.;)