Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda para un principiante (https://www.clubdelphi.com/foros/showthread.php?t=8872)

aragorneuf 04-04-2004 15:08:27

Ayuda para un principiante
 
Alguien sabe como:
¿cómo puedo hacer que un ProgressBar suba y baje entre 0 y 100 de 1 en 1 mostrando cada número en una label?

Aqui dejo mi codigo que empleé, el problema que tiene es que se sube al 100 inmediatamente y no de uno en uno y el label solo aparece con el Max y el Min. ( osea que solo cambia dos veces de 100 a 0 y no gradualmente ).

procedure TF_O.B_1Click(Sender: TObject);
var
i: Integer;
begin
with PB_1 do
begin
PB_1.StepBy(1);
Showmessage('');
for i := Min to Max do
L_1.caption := inttostr(i);
Position := i;
showmessage('Va de regreso');
for i := Max downto Min do
L_1.caption := inttostr(i);
Position := i;
end;
end;
end.

__cadetill 04-04-2004 16:38:44

Código:

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  ProgressBar1.Position := 0;
  ProgressBar1.Step := 1;
  ProgressBar1.Max := 100;
  ProgressBar1.Min := 0;
  for i := 1 to ProgressBar1.Max do
  begin
    Label1.Caption := IntToStr(ProgressBar1.Position);
    ProgressBar1.StepIt;
    Sleep(100); // solo es para ver el visionado
    Application.ProcessMessages;
  end;
end;


aragorneuf 04-04-2004 18:41:27

Muchas Gracias Cadetill, solo que tengo otro problema, que no puedo hacer que en ese mismo boton despues de que llege al 100 regrese a 0.

Intente haciendo la viceversa del primer for pero no me da, ¿Sabes como hacerle?

__cadetill 04-04-2004 19:14:28

Sólo has de cambiar el Step del TProgressBar a -1

Código:

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  ProgressBar1.Position := 0;
  ProgressBar1.Step := 1;
  ProgressBar1.Max := 100;
  ProgressBar1.Min := 0;
  for i := ProgressBar1.Min to ProgressBar1.Max - 1 do
  begin
    Label1.Caption := IntToStr(ProgressBar1.Position);
    ProgressBar1.StepIt;
    Sleep(100); // solo es para ver el visionado
    Application.ProcessMessages;
  end;
  ProgressBar1.Step := -1;
  for i := ProgressBar1.Min to ProgressBar1.Max - 1 do
  begin
    Label1.Caption := IntToStr(ProgressBar1.Position);
    ProgressBar1.StepIt;
    Sleep(100); // solo es para ver el visionado
    Application.ProcessMessages;
  end;
end;


aragorneuf 04-04-2004 19:37:29

Muchas gracias por la respuesta :)

Magician^ 04-04-2004 23:37:44

Un comentario, una manera mas adecuada de hacer este tipo de animaciones es incorporando un componente Timer (ficha "System") en tu formulario. En el evento OnCreate del formulario colocar los valores iniciales:

Código:

procedure TForm1.FormCreate(Sender: TObject);
begin
ProgressBar1.Position := 0;
ProgressBar1.Step := 1;
ProgressBar1.Max := 100;
ProgressBar1.Min := 0;
Timer1.Interval:=100; //Aquí defines que tan rapido quieres que se realize la cuenta
end;

y al evento OnTimer del timer colocar un código similar a este:
Código:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
        Label1.Caption := IntToStr(ProgressBar1.Position);
        ProgressBar1.StepIt;
        If ProgressBar1.Position>99 then ProgressBar1.Step := -1;
        If ProgressBar1.Position<1 then ProgressBar1.Step := 1;
end;

Haciéndolo de esta manera permites que los recursos de la PC no se congestionen en tu aplicación.

Para controlar cuando iniciar y detener la animación usa la propiedad Enabled del Timer.

Saludos.

aragorneuf 04-04-2004 23:50:03

Oh gracias, la verdad que no tenia ni idea de que se pudiera hacer asi, es que no tengo mas de un mes que me inicie en esto de Delphi y apenas voy conociendo los comandos.

marto 05-04-2004 00:19:19

Wop!

Hola aragorneuf, como veo que eres nuevo por estas lares (tú mismo lo dices ;) ), me gustaría darte la bienvenida al club, espero que te veamos mucho por aquí a partir de ahora.

También me gustaría hacerte un par de sugerencias, en primer lugar que le eches un vistazo :rolleyes: a la guía del club (ver firma), en ella se dan unas cuantas recomendaciones sobre cómo redactar los mensajes para que todos estemos más cómodos. Uno de estos consejos es poner títulos más descriptivos en los mensajes, para que otros usuarios con el mismo problema puedan buscar la solución más cómodamente. La otra sugerencia es que, cuando pongas código, lo encierres entre etiquetas "[code]", para que se pueda leer indentado (tal y como han echo los compañeros en este mismo mensaje).

Nada más, es normal que si empiezas a entrar ahora en el foro comentas estos "errores", ya que todos lo hemos hecho, pero con un poquito de voluntad de cada uno, la convivencia en el foro es mucho más agradable.

aragorneuf 05-04-2004 00:53:25

Cita:

Empezado por marto
Wop!

Hola aragorneuf, como veo que eres nuevo por estas lares (tú mismo lo dices ;) ), me gustaría darte la bienvenida al club, espero que te veamos mucho por aquí a partir de ahora.

También me gustaría hacerte un par de sugerencias, en primer lugar que le eches un vistazo :rolleyes: a la guía del club (ver firma), en ella se dan unas cuantas recomendaciones sobre cómo redactar los mensajes para que todos estemos más cómodos. Uno de estos consejos es poner títulos más descriptivos en los mensajes, para que otros usuarios con el mismo problema puedan buscar la solución más cómodamente. La otra sugerencia es que, cuando pongas código, lo encierres entre etiquetas "[code]", para que se pueda leer indentado (tal y como han echo los compañeros en este mismo mensaje).

Nada más, es normal que si empiezas a entrar ahora en el foro comentas estos "errores", ya que todos lo hemos hecho, pero con un poquito de voluntad de cada uno, la convivencia en el foro es mucho más agradable.

Ok, lo tomare en cuenta en los siguientes hilos, y gracias por decirme.


La franja horaria es GMT +2. Ahora son las 03:40:15.

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