Yo lo haría así:
Cerrar los formularios hijo
Código Delphi
[-]
for I := MDIChildCount - 1 downto 0 do
MDIChildren[i].Close;
OnCloseQuery del formulario hijo:
Código Delphi
[-]
const
Flags = MB_ICONWARNING or MB_YESNOCANCEL;
begin
if HayCambios then
case Application.MessageBox('¿Desea guardar los cambios?', 'Confirmar', Flags) of
ID_YES: ;
ID_NO: ;
ID_CANCEL: abort ;
end;
end;
// Saludos