Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   repeticion no codificada de un ShowMessage() (https://www.clubdelphi.com/foros/showthread.php?t=78612)

odiseeus 04-05-2012 04:14:36

repeticion no codificada de un ShowMessage()
 
buen día.
hace tiempos no entraba, que pena! :o ...
el problema es el siguiente:
tengo un Timer el cual me marca el tiempo de un cronometro, los valores del cronometro los guarda directamente en 4 Labels, uno por cada digito de los minutos y los segundo asi: 00:00, hasta el momento todo bien, el problema surge cuando quiero que a determinado tiempo aparezca un mensaje en pantalla y que el timer siga corriendo, pues el mensaje se muestra repetidamente sin control, aclaro que la orden de mostrar el mensaje esta dada para que la muestre una sola vez.. en un solo valor del contador del tiempo, asi va el codigo:

Código:

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//cont esta anteriormente declarada e inicialmente bien.
//los componentes que empiezan con 'display' son Labels
//que guardan los valores de segundos y minutos cada uno con su digito.
//barraProgreso es un componente progressBar que no tiene ningun inconveniente. (hasta el momento)
if (cont%10==0)
{
        displaySeg1->Caption=(cont/10)%6;
  displaySeg1->Repaint();
}
displaySeg2->Caption=cont%10;
displaySeg2->Repaint();
if (cont%60==0)
{
        displayMin2->Caption=(cont/60);
        displayMin2->Repaint();
}
barraProgreso->Position=cont%300;
if (cont==270)
{
        reproductor->Play();
        ShowMessage("estas a menos de 30 segundos de pasarte!");
}
if (cont>=300)
{
        botonFin->Click();
}
cont++;
}

tambien lo he intentado haciendo el llamado al evento click de un boton no visible donde esta el mismo ShowMessage, colocando el condicional asi:
Código:

if (cont==270)
{
        reproductor->Play();
        botonAviso->Click();
}

a lo cual por si solo se le da click y me muestra solo una vez el mensaje, pero llamado desde el timer muestra tantas veces que puede hasta que logro parar o cerrar el programa :confused:
espero una ayuda gracias.

ecfisa 04-05-2012 06:04:23

Hola.

Probá de este modo:
Código:


int swOpen = 0;

...

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
...
  if (cont == 270 && !swOpen) {
    swOpen = 1; 
    ...
  }
...

Saludos.

odiseeus 05-05-2012 21:17:17

Gracias ecfisa... lo probaré, aunque lo corregí de una manera mas robusta.... deteniendo el Timer antes del mensaje y empezando un Timer temporal mientras el mensaje y despues volví al Timer inicial... éxitos!

ecfisa 06-05-2012 00:36:45

Cita:

Empezado por odiseeus (Mensaje 431845)
Gracias ecfisa... lo probaré, aunque lo corregí de una manera mas robusta.... deteniendo el Timer antes del mensaje y empezando un Timer temporal mientras el mensaje y despues volví al Timer inicial... éxitos!

Hola odiseeus.

Me alegro que le dieras solución :), en realidad te sugerí esa opción por que entendí, por tu primer mensaje,
Cita:

el problema surge cuando quiero que a determinado tiempo aparezca un mensaje en pantalla y que el timer siga corriendo
que deseabas no interrumpir el TTimer inicial.

Saludos.


La franja horaria es GMT +2. Ahora son las 10:44:00.

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