No es que no libere completamente el formulario. Recuerda que una variable de tipo objeto es en realidad un puntero al objeto. Al usar Free se libera la memoria asignada al objeto pero el puntero sigue apuntando a una porción de memoria que ya no es válida. En algún momento tienes que volver a poner el puntero en nil. Una comparación como
if Assigned (FMenuPrecios) then
realmente no verifica si el objeto existe o no, únicamente verifica si la referencia a dicho objeto (la variable) es nil o no. Es decir, la comparación es equivalente a:
if FMenuPrecios <> nil then
En el evento OnClose podrías intentar poner
FMenuPrecios := nil;
// Saludos
|