Permitir cancelar processo demorado no Delphi
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;
Não se esqueça de que o Form1 precisa usar Form2 e vice-versa.