Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Parar ProgressBar (https://www.clubdelphi.com/foros/showthread.php?t=81614)

DOS994 30-11-2012 03:35:40

Parar ProgressBar
 
Hola a todos:
Tengo este problema.

tengo un progressbar que cuando llega al 2% tiene que cambiar de formulario y ocultar en el que esta.

pero el problema es que dentro del progressbar se encuentra un ciclo for, este hace que al cerrar mi programa me de error de ONSHOW y de ONHIDE intente return este me para el progressbar pero me pestañea al cambiar de formulario.

hay alguna función en el progressbar que lo pare.

el código que tengo es algo así

Código:

for(ProgressBar1->Position=0;ProgressBar1->Position>0<ProgressBar1->Max;ProgressBar1->Position++)
{
Application->ProcessMessages();
Sleep(50);

for(int j=0;j<25;j++)
{
CopyFile((Origen+Archivo[j]).c_str(),(Destino+Archivo[j]).c_str(),false);

}
if(Label1->Caption == "2%")
{
Form4->Show();
return;
Form3->Hide();
}
}
Sleep(250);
ProgressBar1->Position=0;


Gracias de antemano

ecfisa 30-11-2012 06:24:30

Hola DOS994.

A ver:
Cita:

tengo un progressbar que cuando llega al 2% tiene que cambiar de formulario y ocultar en el que esta.
Dado que estas ocultando Form3, infiero que el ProgressBar esta situado en él, así que sacando los retardos, que no pueden ser motivo de error y el proceso de copia que me es imposible reproducir, me queda:
Código:

void __fastcall TForm3::Button1Click(TObject *Sender)
{
  TProgressBar *pb = static_cast<TProgressBar*>(ProgressBar1);

  for(pb->Position=0; pb->Position < pb->Max; pb->Position++){
    Label1->Caption = IntToStr(pb->Position)+'%'; // esto no sé donde lo asignas
    Application->ProcessMessages();
    for(int j=0;j<25;j++)
      // CopyFile((Origen+Archivo[j]).c_str(),(Destino+Archivo[j]).c_str(),false);
      Sleep(20); // un retardo para simular la copia
    if(Label1->Caption == "2%") {
      Form4->Show();
      Form3->Hide();
    }
  }
  pb->Position=0;
}

El código, si bién tiene la dolencia de dejar invisible a Form3 cuando Label1 tiene el valor "2%" y no hacerlo visible ante un posible fallo, en ningún momento me arrojó error.

Cita:

hay alguna función en el progressbar que lo pare.
En tu código el ProgressBar actua como variable de control del ciclo for, para pararlo hay que salír de él. Ya sea mediante return, break o finalizar el ciclo dando a la propiedad ProgressBar1.Position el valor de la propiedad ProgressBar1.Max.



Realmente no me queda muy claro la finalidad del código, ni el planteo del problema. ¿ Que error literalmente te esta dando y en que parte del código ?

Saludos. :)

DOS994 30-11-2012 15:38:42

Código:

Realmente no me queda muy claro la finalidad del código, ni el planteo del problema. ¿ Que error literalmente te esta dando y en que parte del código ?

Para aclarar más mi problema:

Al cambiar de formualario y cerrar mi programa me da el Error en ONSHOW y ONHIDE pero es porque el progressbar no para solo por tener el ciclo for dentro.


yo cierro exit(0) o cerrando todos los Form con Close()

ecfisa 30-11-2012 17:50:43

Cita:

Empezado por DOS994 (Mensaje 450975)
Para aclarar más mi problema:

Al cambiar de formualario y cerrar mi programa me da el Error en ONSHOW y ONHIDE pero es porque el progressbar no para solo por tener el ciclo for dentro.

yo cierro exit(0) o cerrando todos los Form con Close()

Hola DOS994.

Creo que no me he sabido explicar...

Sigo sin saber cual es exáctamente el mensaje error que te da. ¿ Podrías copiarlo y pegarlo en un mensaje para así saber de que se trata ?

Saludos.

DOS994 04-12-2012 19:25:59

la respuesta a mis problemas fue que tenía que destruir la Form3 antes de pasar a la Form4.

Form3->Destroying();

Si no funciona esta probar con la otra opcion de destroying.


La franja horaria es GMT +2. Ahora son las 05:15:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi