El método Free no debe llamarse desde el formulario. En su lugar debe usarse Release ya que este método se encarga de esperar a que termine cualquier evento que esté procesando el formulario y sólo entonces llama a Free.
En cuanto a Action := caFree es exactamente lo mismo que Release. Si revisas el código fuente de la unidad Forms.pas notarás que el método Close del formulario llama al evento OnClose y cuando este último regresa, Close verifica el parámetro Action. Si Action es igual a caFree entonces Close llama al método Release.
// Saludos
|