Posso usar Abort depois do form fechado?

Delphi

17/03/2008

Estou com a seguinte dúvida:
Tenho um form que é aberto enquanto um loop é processado.

Coloquei um botão para cancelar o loop. Se o usuário confirma o cancelamento sai do loop e o form é fechado.
Se coloco para fechar o form [u:8b8ed3fb38]depois[/u:8b8ed3fb38] do Abort [u:8b8ed3fb38]ele não é fechado [/u:8b8ed3fb38]então coloquei desta forma:

while...
if cancelar...
begin
[color=darkblue:8b8ed3fb38][b:8b8ed3fb38]Form.Close;
Abort;[/b:8b8ed3fb38][/color:8b8ed3fb38]
end;

Assim o form é fechado mas [color=darkblue:8b8ed3fb38]isto pode ocasionar algum problema[/color:8b8ed3fb38]?


Asales

Asales

Curtidas 0

Respostas

Massuda

Massuda

17/03/2008

Qual a finalidade desse Abort no seu código?


GOSTEI 0
Asales

Asales

17/03/2008

Massuda, é o seguinte:
ao processar uma grande quantidade de dados mostro uma tela com um progressbar que é preenchido de acordo com um loop.

Coloquei um botão para cancelar e ao clicar neste botão o processamento é interrompido e se o usuário confirmar então o processo é abortado e o form fechado.

Só que se coloco o [color=darkblue:778effb9dd]Abort antes do form.close o formulário [u:778effb9dd]não é fechado[/u:778effb9dd][/color:778effb9dd].

Só funciona se [color=darkblue:778effb9dd]fecho o formulário e [u:778effb9dd]depois dou o Abort[/u:778effb9dd][/color:778effb9dd].

Minha dúvida é se [color=darkblue:778effb9dd]isso pode causar algum problema[/color:778effb9dd]: Abort num loop dentro de um form que foi destruído (utilizo ´Action := caFree´ ao fechar o formulário).

Exemplo do que faz loop:
for i:= 1 to 100000 do
begin
Application.ProcessMessages;
if Cancelar Then [color=darkred:778effb9dd]// interrompo o processo[/color:778effb9dd]
begin
if MessageDlg(´Deseja Cancelar ?´,mtConfirmation,[mbYes,mbNo],0) = mrYes Then
begin
Form1.close; [color=darkred:778effb9dd]// aqui o formulário é fechado (Action := caFree)[/color:778effb9dd]
[color=darkblue:778effb9dd]Abort[/color:778effb9dd]; [color=darkred:778effb9dd]// depois vem o Abort (ele surte algum efeito já que fechei o formulário?)[/color:778effb9dd]
end;
end;


GOSTEI 0
Massuda

Massuda

17/03/2008

Acredito que Abort não deveria ser usado no seu caso. Abort, conforme a ajuda do Delphi, simplesmente equivale a isto...
raise EAbort.Create(...);
...para parar o loop você deve usar [b:5603d419cc]Break[/b:5603d419cc].


GOSTEI 0
Asales

Asales

17/03/2008

Ok Massuda,
estarei testando.
Obrigado


GOSTEI 0
POSTAR