He optado por una variable pública en el Formulario principal (MainCanClose) que si se opta por cancelar la operación de cierre, se pone al valor deseado dentro del form Child que se está cerrando en ese momento.
... lo que me obliga a modificar todas las rutinas de cierre de todos los formularios MDIChild para incluir esa llamada a la variable del formulario principal.
Código Delphi
[-]type
TMainform = class(TForm)
...
public
MainCanClose : Boolean;
....
procedure TMainform.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
i : Integer;
begin
if MDIChildCount <> 0 then begin
MainCanClose := True;
for I := 0 to MDIChildCount - 1 do begin
MDIChildren[i].Close;
if not MainCanClose then begin
CanClose := False;
Exit;
end;
end;
end;
end;
Código Delphi
[-]procedure TMDIChildCualquiera.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
If not PreguntadeCierre then begin
MainForm.MainCanClose := False;
Action := caNone;
end;
...
end;
Si alguien sabe una solución mejor, sin tener que modificar todos los MDIChild, pues le agradecería mucho su comentario.
Saludos