Fonte: www.activedelphi.com.br
Nesta dica comentarei sobre dois componentes muito utilizados para montarmos barras de progresso no Delphi: o ProgressBar e o Gauge
Para fazermos uma aplicação de exemplo, insira no form de um novo projeto:
3 Componentes TLabel - Paleta Standard;
1 Componente ProgressBar - Paleta Win32;
1 Componente TGauge - Paleta Samples;
1 Componente TTimer – Paleta System;
1 Componente TButton – Paleta Standard;
2 Componentes TRadioButton – Paleta Standard;
1 Componente ProgressBar - Paleta Win32;
1 Componente TGauge - Paleta Samples;
1 Componente TTimer – Paleta System;
1 Componente TButton – Paleta Standard;
2 Componentes TRadioButton – Paleta Standard;
Mude a propriedade Caption do formuláo para Barras de Progresso. Mude também a propriedade Interval do componente TTimer para 100 (ou menos) e sua propriedade Enabled para False:
Ainda com o TTimer, no seu evento OnTimer, adicione o seguinte código:
procedure TForm1.Timer1Timer(Sender: TObject); begin //Se o RadioButton1 estiver marcado executa o código abaixo if RadioButton1.Checked then begin label2.Caption := inttostr(ProgressBar1.Position)+ '%'; progressbar1.position := progressbar1.position+5; if progressbar1.position = 10 then begin Label1.caption:='Carregando Telas: '; //escreva o que quiser label1.Repaint; end; if progressbar1.position = 35 then begin label1.caption:='Carregando as Tabelas'; label1.Repaint; end; if progressbar1.position = 85 then begin label1.caption:='Finalizando'; label1.Repaint; end; end; //FIM IF RADIOBUTTON1 //Se o RadioButton2 estiver marcado executa o código abaixo if RadioButton2.Checked then begin gauge1.progress := gauge1.progress+5; if gauge1.progress = 10 then begin Label3.caption:='Carregando Telas: '; //escreva o que quiser label3.Repaint; end; if gauge1.progress = 35 then begin label3.caption:='Carregando as Tabelas'; label3.Repaint; end; if gauge1.progress = 85 then begin label3.caption:='Finalizando'; label3.Repaint; end; end; //FIM IF RADIOBUTTON2 end;
Para finalizarmos, no evento OnClick do TButton, faça:
ProgressBar1.Position := 0; Gauge1.Progress := 0; Timer1.Enabled := True; if RadioButton1.Checked then while ProgressBar1.Position < 100 do Application.ProcessMessages; if RadioButton2.Checked then while Gauge1.Progress < 100 do Application.ProcessMessages; Timer1.Enabled := False;
Como você pode perceber, esta rotina simplesmente aumenta a posição de uma das barras de progresso em um intervalo de tempo pré definido, o que costuma ser utilizado em telas de Splash e também formuláos de consultas demoradas. Porém em operações de processamento demorados e que se sabe a quantidade de execuções (como percorrer os registros de uma tabela, por exemplo), o correto é fazermos:
//atribuir o valor máximo /qtde de processamento Gauge1.MaxValue := DataSet.RecordCount; while not DataSet.Eof do begin //processamento dos dados DataSet.Next; //ajustar a posição da barra de progresso Gauge1.Progress := Gauge1.Progress; end;
Nenhum comentário:
Postar um comentário