PDA

Ver la Versión Completa : Progressbar


Paulao
28-05-2008, 20:09:06
Cómo pongo una Progressbar en este codigo:
procedure TfrmLe_ECF.cxButton1Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
CapturaStatus;
AssignFile(arq,ExtractFilePath(Application.ExeName)+'\Teste.TXT');
Rewrite(arq);
Write(arq,guardastatus.Text);
CloseFile(arq);
Screen.Cursor := crDefault;
end;
Esta progress es para muestrar el andamiento del los archivos, o sea, mientras va se grabando en el disco se muestrando el progressbar.

Casimiro Notevi
28-05-2008, 20:43:56
uuummm... no veo ningún bucle de "andamiento" para usar una barra de progreso, creo que no has puesto el código oportuno :)

roman
28-05-2008, 21:02:17
Pues sí, como comenta Casimiro, si quieres mostrar el progreso de lo andado, debes andar por partes. Al parecer escribes todo el contenido en un sólo paso:


Write(Arq, GuardaStatus.Text);


Podrías intentar escribiendo línea a línea:


ProgressBar1.Max := GuardaStatus.Lines.Count;
ProgressBar1.Position := 0;
ProgressBar1.Step := 1;

for I := 0 to GuardaStatus.Lines.Count - 1 do
begin
ProgressBar1.StepIt;
WriteLn(Arq, GuardaStatus.Lines[I]);
end;


Claro, suponiendo que GuardaStatus es un Memo a algo similar.

// Saludos

Paulao
28-05-2008, 21:20:53
Yo hizo asi, pero no camina el progress. El queda en 0% y despues se va a 100%. No va asi, 0,1,2,3...100%. Este es el codigo que yo puzo. guardastatus es una StringList y CapturaStatus es una procedure para llenar el StringList solamente. Mi progressbar es una TcxProgressBar.

procedure TfrmLe_ECF.cxButton1Click(Sender: TObject);
var
i: Integer;
begin
Screen.Cursor := crHourGlass;
CapturaStatus;
AssignFile(arq,ExtractFilePath(Application.ExeName)+'\Teste.TXT');
Rewrite(arq);

pb.Properties.Max := guardastatus.Count;
pb.Position := 0;

for I := 0 to GuardaStatus.Count - 1 do
begin
pb.Position := pb.Position;
WriteLn(Arq, GuardaStatus.Text[i]);
end;

Write(arq,guardastatus.Text);
CloseFile(arq);
Screen.Cursor := crDefault;
end;

Paulao
28-05-2008, 21:22:08
Perdon, esta linea estas asi:
pb.Position := pb.Position+i;

Paulao
28-05-2008, 21:43:21
Yo puzo un Count, pero Count de que? Creo que el no sabe que Count, falta algo que no se que es, por eso no funciona, o sea va de 0 hacia 100, pues no tiene una referencia para un Count. Si fuera linea, entonces el Count estaria apropriado. Tipo: Memo.Lines.Count, el estaria contado las lineas, pero es un Stringlist.

jcarteagaf
28-05-2008, 21:49:41
Cambia tu codigo de esta forma:

procedure TfrmLe_ECF.cxButton1Click(Sender: TObject);
var
i: Integer;
begin
Screen.Cursor := crHourGlass;
CapturaStatus;
AssignFile(arq,ExtractFilePath(Application.ExeName)+'\Teste.TXT');
Rewrite(arq);

pb.Properties.Max := guardastatus.Count;
pb.Position := 0;
pb.Step := 1; // queremos que vaya de 1 en 1
for I := 0 to GuardaStatus.Count - 1 do
begin
pb.StepIt; // avanza de 1 en 1
Application.Processmessages; // refresca la pantalla
WriteLn(Arq, GuardaStatus.Text[i]);
end;

Write(arq,guardastatus.Text);
CloseFile(arq);
Screen.Cursor := crDefault;
end;

Saludos