Hola a todos.
Quiero hacer algo muy sencillo pero que se me está resistiendo bastante. Utilizo codetyphon v 5.50.
Quiero mostrar un mensaje en un panel por ejemplo, pero sólo durante un periodo muy corto de tiempo, pongamos 3 segundos, y al cabo de ese tiempo, que se cierre solo el mensaje.
El mensaje lo podemos mostrar/ocultar con la propiedad visible del panel poniéndola en true o false.
Ahora bien ¿cómo se hace? ¿Hay algún componente de CT que haga eso? He visto que hay media docena de timers, pero la documentación es parca y no encuentro algo que ejecute un evento durante un periodo de tiempo.
El caso es que trasteando con un timer normal y corriente he conseguido hacerlo, pero no entiendo del todo cómo lo he hecho. Os pongo el código.
En un formulario pongo un botón, un timer (con la propiedad enabled a false) y un panel que es el que mostrará el mensaje y que por defecto tiene visible en false (mensaje oculto).
El timer le pongo el interval en 3000 ms (3 s), el tiempo que se muestra el mensaje.
procedure TForm1.Button1Click(Sender: TObject); begin timer1.Enabled := True; //al darle al botón pongo en marcha el timer end; procedure TForm1.Timer1StartTimer(Sender: TObject); begin Panel1.Visible := True; //hago visible el panel que contiene el mensaje Panel1.Repaint; //lo repinto end; procedure TForm1.Timer1StopTimer(Sender: TObject); begin Panel1.Visible := False; //hago invisible el panel (oculto el mensaje) end; procedure TForm1.Timer1Timer(Sender: TObject); begin Panel1.Visible := True; //codigo repetido en starttimer Panel1.Repaint; //codigo repetido en starttimer timer1.Enabled := False; //lo desactivo para que solo lo ponga el marcha la pulsación del botón end;
Como os digo, con este código funciona bien pero no lo comprendo del todo. Como indico en los comentarios del código, hay código duplicado en el evento timer y en el evento starttimer. Si quito el código duplicado en cualquiera de los dos eventos, NO funciona. Si lo quito de startimer, el mensaje no se muestra y si lo quito del evento timer, el mensaje se muestra pero no se oculta nunca.
En fín, que antes de utilizar un código que funciona pero del que dudo si es una chapuza, me he pasado por aquí y os pregunto. ¿Ideas? ¿Es correcto el código?
Un saludo.