Ir ao topo

Tecnobyte

Logomarca da Tecnobyte
Contato por WhatsApp

WhatsApp

(69) 3421-6756

Contato por Telefone

(69) 3421-6756

(69) 3421-6757

Enviar mensagem

Enviar

mensagem

Contato por Facebook

Facebook

Vídeos

Vídeos

Atendimento de segunda a sexta, das 08h00 às 19h00 (horário de Brasília).

Banner

Delphi - Outros

Como permitir o cancelamento de um processo demorado?

Problema:

Em determinadas partes no programa existem processos que podem
demorar vários minutos para serem concluídos. Muitas vezes o
usuário desiste e deseja cancelar o processamento. Como 
permitir este cancelamento?

Solução:

Em aplicativos para Windows é comum, em processamentos 
demorados, o programa mostrar uma janela de diálogo avisando
que o processo pode levar um tempo extra. Nesta mesma janela 
normalmente coloca-se também um botão "Cancelar" que dá ao
usuário a opção aguardar ou desistir do processo. Para fazer 
isto em um aplicativo Delphi, siga os passos abaixo:

- Vamos considerar em nosso exemplo que o processamento ocorre
  na unit do Form1.

- Declare, na seção public do Form1, uma variável boolean. 

  public;
    Cancelar: boolean;

- Crie um novo form (vou chamá-lo de Form2);
- Coloque um botão neste novo form. Programe o OnClick deste
  botão conforme abaixo:

  Form1.Cancelar := true;

- Na parte onde ocorre o loop do processamento demorado
  coloque algo como:

  try
    { Antes de começar o processamento }
    Form2.Caption := 'Processamento demorado...';
    Form2.Show;

    { No início do loop "Cancelar" precisa ser false }
    Cancelar := false;

    { Aqui inicia o loop do processamento demorado }
    while {...} do begin

      { ... Processa algo aqui... }

      { Permite que o programa processe mensagens do Windows }
      Application.ProcessMessages;

      { Se a variável "Cancelar" foi alterada para true... }
      if Cancelar then begin
        ShowMessage('Operação cancelada pelo usuário.');
        Break; { Sai do loop }
      end;

    end;

  finally
    Form2.Close;
  end;

Observações

Não se esqueça de que o Form1 precisa usar Form2 e vice-versa.

O conteúdo desta página pode ajudar alguém? Compartilhe!