Dicas - Como inserir uma barra de progresso dentro de uma caixa de diálogo

Veja nesta dica, como inserir um ProgressBar, dentro de uma caixa de diálogo.

Como inserir uma barra de progresso dentro de uma caixa de diálogo

Vamos supor que você possui uma caixa de diálogo padrão do Windows, exibindo uma pergunta ao usuário, com os botões “Sim” e “Não”. Não seria legal se uma barra de progresso pudesse ser exibida dentro da caixa de diálogo e que “contasse” os segundos até que a caixa de mensagem fosse fechada automaticamente?

1.Primeiro criamos um diálogo utilizando CreateMessageDialog;

2.Esta função retorna um objeto formulário com o diálogo;

3.Neste objeto, podemos adicionar uma barra de progresso;

4.Além disso, adicionamos um Timer para atualizar a barra de progresso dinamicamente

5.Exibimos o diálogo utilizando ShowModal

6.Implementamos o evento OnTimer do Timer para verificar se o tempo limite foi atingido – caso verdadeiro, fechamos o diálogo alterando a propriedade ModalResult, pelo código, para mrCancel

7.Caso contrário, utilizamos StepIt para atualizar a barra de progresso

Adicione um Button (Button1) a um formulário (Form1), e experimente seguinte código:

 

procedure TForm1.Button1Click(Sender: TObject) ;

var

  AMsgDialog: TForm;

  AProgressBar: TProgressBar;

  ATimer: TTimer; { uses ExtCtrls }

begin

  AMsgDialog := CreateMessageDialog('Rápido! Resposta Sim ou Não', mtWarning, [mbYes, mbNo]);

  AProgressBar := TProgressBar.Create(AMsgDialog);

  ATimer := TTimer.Create(AMsgDialog);

  with AMsgDialog do

  try

Tag := 10; //segundos

Caption := 'Você tem 10 segundos';

Height := 150;

with AProgressBar do

begin

 Name := 'Progress';

 Parent := AMsgDialog;

 Max := AMsgDialog.Tag; //segundos

 Step := 1;

 Top := 100;

 Left := 8;

 Width := AMsgDialog.ClientWidth - 16;

end;

with ATimer do

begin

  Interval := 1000;

 OnTimer := DialogTimer;

end;

case ShowModal of

ID_YES: ShowMessage('Respondeu "Sim".');

ID_NO: ShowMessage('Respondeu "Não".');

ID_CANCEL: ShowMessage('Tempo estourado!')

end;

   finally

ATimer.OnTimer := nil;

Free;

   end;

end;

 

//certifique-se que o cabeçalho da função foi adicionado à seção private

procedure TForm1.DialogTimer(Sender: TObject) ;

var

  aPB: TProgressBar; { uses ComCtrls }

begin

  if NOT (Sender is TTimer) then

Exit;

  if ((Sender as TTimer).Owner) is TForm then

  with ((Sender as TTimer).Owner) as TForm do

  begin

    aPB := TProgressBar(FindComponent('Progress')) ;

if aPB.Position >= aPB.Max then

  ModalResult := mrCancel

else

  aPB.StepIt;

  end;

end;

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados