Te respondo como lo haría yo. Esto no aborta el FormRepaint, pero por lo menos no te generará los errores de no liberar al form.
Variable global al form:
PuedoCerrar : boolean;
Código:
procedure TForm.FormActivate(Sender: TObject);
begin
Self.OnActivate := nil;
PuedoCerrar := False;
FormRepaint;
PuedoCerrar := True;
end;
procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (PuedoCerrar) then
begin
Action := caFree;
FormMain := nil;
end else
Action := caNone;
end;