quinta-feira, 22 de julho de 2010

Utilizando Barras de Progresso


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;
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