Hace bastante tiempo me volvían locos esos errores, simplemente haz esto:
Código Delphi
[-]
procedure Tform1.FormClose(....);
begin
action := cafree;
nombreVentana := nil;
end;
Las ventanas sigue creandolas como lo haces ahora.
Las llamadas a Destroy no debes hacerlas; es más ahora no te hacen falta, simplemente llama al método NombreVentana.Close o bien, si quieres acceder desde la forma MDI: FormaMdi.MdiChildren[i].Close
Un saludo