Mit einem Timer geht es:
Code:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := true;
if Assigned(fTask) then begin
if fTask.Status = TTaskStatus.Running then
fTask.Cancel;
Timer1.Enabled := true;
CanClose:=Button1.Enabled;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Button1.Enabled then
Close;
end;
Wenn das Formular geschlossen werden soll, wird der Task gecancelt. Ist der Task aber nocht fertig beendet, wird das Schließen unterbunden + statt dessen ein Timer gestartet, der 1x/sec nachschaut, ob der Task jetzt endlich fertig ist. Wenn ja, wird das Formular geschlossen.
Besser?