Kein Wunder, Du gibst sl frei in CloseQuery (über ProcessMessages) und greifst nach der Schleife dann nochmal darauf zu
So zB:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Aborted:=True;
if assigned(sl) then begin
sl.Free;
sl:=nil;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: longint;
begin
sl:=Tstringlist.Create;
try
for i:=0 to 1000000 do begin
label1.Caption:=inttostr(i);
application.processmessages;
If Aborted then Break;
end;
finally
freeandnil(sl)
end;
end;
PS: Dies schließen der Form bedeutet nicht, das aus Schleifen gesprungen wird, die laufen fleißig weiter (u.u. bis es kracht).