Hola...
El error
Access violation at address... se produce por una omisión mía. Te explico: la clase
TObjectList puede 'tomar' posesión de los objetos que se agregan, esto se traduce a que, al eliminar un objeto de la lista, esta lo destruye automáticamente.
Para evitar el error de acceso de memoria, tienes que crear el objeto
TObjectList pasando
False como valor del parámetro del constructor:
Código Delphi
[-]
FNotes := TObjectList.Create(False);
con esto le indicas a la lista que no debe destruir los objetos al eliminarlos de la esta.
Entonces el código del evento
OnClose ya te debería funcionar sin errores.
Sobre tu duda al cerrar el formulario, si usas el código que te puse de ejemplo, este se destruirá cada vez que uses el botón cerrar del fomulario (la famosa aspa superior derecha
)
Saludos...