Como abortar no meio de um procedimento?
23/11/2005
0
sei o o Break pode ser utilizado para abordar um laço (for, while). mas para abortar através de uma condição?
Raserafim
Posts
23/11/2005
Edilcimar
23/11/2005
Marlon Spiess
Criar uma aplicação simples com um label e um button
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i := 1 to 2000 do
begin
label1.Caption := IntToStr(i);
label1.Refresh;
if i = 300 then
begin
label1.Caption := ´Sai´;
label1.Refresh;
Abort;
end;
end;
end;
23/11/2005
Massuda
Exit é a forma tradicional do Pascal/Delphi para sair no ´meio´ de um procedure ou function. Equivale ao return do C e do Clipper (como o Edilcimar citou).
@Marlon
Abort gera uma exceção ´silenciosa´. Use isso em (tratadores de) evento (como no seu exemplo), pois a VCL interrompe o processamento de um evento quando detecta essa exceção.
Por exemplo, (se eu não estiver enganado) se executar Abort no meio do tratamento do evento OnBeforePost de um TTable, o registro não é inserido.
24/11/2005
Raserafim
24/11/2005
Vitor Rubio
pergunto isso porque eu nunca usei abort, soh uso exit.
24/11/2005
Massuda
Na verdade, usar Abort ou Exit depende do que você pretende fazer no tratamento do evento.
Se sua intenção é interromper totalmente o tratamento do evento, use Abort.
Se você usar Exit, simplemente o seu tratamento do evento irá terminar e a VCL continuará tratando o evento. No exemplo com o OnBeforePost, o registro seria gravado.
24/11/2005
Siam
24/11/2005
Raserafim
procedure begin if ... then begin ... ... end else Exit ou Abort; ... ... end;
claro q o q eu quero nao é tão simples assim, mas só ilustrando...
nesta situação qual devo usar? quero evitar (caso necessário) as ultimas linhas.
24/11/2005
Vitor Rubio
Já o abort impede que o FonAlgumaCoisaAcontece termine tambem.
Se vc olhar os fontes dos componentes verá que todo evento na verdade é uma propriedade do tipo TnotufyEvent, e o componente tem uma procedure assim:
FacaAlgo;
begin
....
...
if assigned(FonAlgumaCoisaAcontece) then
FonAlgumaCoisaAcontece();
...
...
end;
sendo que FonAlgumaCoisaAcontece é a rotina que você escreve para o evento, tipo oonclick do botão.
ou seja, o exit sairia de FonAlgumaCoisaAcontece, faria com que não acontecesse mais nada que você programou para o onclick do botão, já o abort pararia tudo, sua rotina e o proprio onclick do botão, fazendo com que a vcl não terminasse de clicar o botão. Sempre que vc clica no botão, alguma coisa ele faz, mesmo não tendo nada programado no onclick. é isso que ele deixaria de fazer.
não sei se eh isso mesmo mas foi isso que eu entendi.....
24/11/2005
Massuda
24/11/2005
Marlon Spiess
espero ter ajudado
25/11/2005
Siam
Colocando-se [b:bc7c04ed90]Abort[/b:bc7c04ed90], o finally também é executado.
Qual seria a diferença neste caso ?
25/11/2005
Massuda
Abort não faz nada de especial: é uma procedure que gera um exceção do tipo EAbort (se não estou enganado). EAbort funciona como qualquer exceção, a diferença é que o código da VCL reconhece essa exceção e trata ela.
Clique aqui para fazer login e interagir na Comunidade :)