Veamos ahora el segundo problema :
Como han comentado, no hace falta que uses la directiva
var al pasar por referencia un parámetro. Esa directiva solo se pone en la definición del parámetro, pero en el momento de llamar a la función, en el parámetro tienes que poner una variable (como podrías hacer perfectamente en una parámetro pasado por valor).
Tienes que poner una variable porqué, una vez ejecutado el procedimiento, si se ha modificado el valor, solo tienes que leer el contenido de la variable para conocer el valor modificado.
Así pues, la llamada te quedaría :
Código:
var PuedeCerrar: boolean;
begin
PuedeCerrar := True;
Ventana.FormCloseQuery(Ventana; PuedeCerrar);
end;
Como puedes ver, tienes que referenciar el formulario con una variable que apunte a él. (Al igual que pasaba con los componentes, sinó tendrías el mismo problema al intentar ejecutar el procedimiento).
Como comenté en el primer mensaje, no es nada aconsejable programar de esta forma, accediendo directamente a componentes y llamando a eventos de otros formularios. Esto te complica mucho el mantenimiento del programa, hacer modificaciones, ver donde falla, etc .... Seria mucho mejor que todo lo que quieras hacer sobre un formulario, lo pongas en unos métodos públicos que sean lo único a lo que se accede desde fuera del formulario.
Saludos.