Ver Mensaje Individual
  #4  
Antiguo 23-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 28
jachguate Va por buen camino
Cool

Hola.

Cita:
Empezado por sur-se
Efectivamente el polimorfismo debería actuar aquí al redefinir el método Puedo_Cerrar con override. Lo que no tenía claro es que al hacer el "with MDIChildren[i] as TMDIBase1 do" tomase el Puedo_Cerrar de la nueva clase y no de la TMDIBase1, ya que al decirle que trate al MDIChildren[i] como un formulario TMDIBase1 no llamase al método Puedo_Cerrar redefinido.
Si no fuese así... ¿que sería el polimorfismo entonces?

Cita:
Lo que no veo tan claro es lo que me comentas del método OnCloseQuery. Efectivamente si trato de cerrar un formulario me saltaría ese evento y ahí podría hacer ese proceso para que no se cerrara, pero no me solventaría lo que pretendo hacer. Yo quiero saber si puedo o no cerrar el formulario. Tal como tu comentas tendría que hacer un close del formulario, y el se gestionaría, pero desde donde hago el close tendría que hacer más adelante una comprobación de si se cerró o no, por lo que al final tendría que consultar de alguna manera eso. Por ello, lo encapsule en el método Puedo_Cerrar.
No tenes que cerrar necesariamente cada formulario. Si seguis con la idea de "hacerlo a mano" podes hacer algo como:

Código Delphi [-]
var 
  cerrar_aplic:boolean;

begin
  cerrar_aplic := True;
  for i:=0 to MDIChildCount-1 do
    if assigned(MDIChildren[i].OnCloseQuery) Then
    Begin
      MDIChildren[i].OnCloseQuery(nil, cerrar_aplic);
      if not CerrarAplic Then
        Break;
    end;
  if cerrar_aplic then 
    action:=cafree
  else 
    action:=canone;
end;

Aunque ciertamente, no hace falta. Como ya dije antes, cuando el usuario trate de cerrar la aplicación, la VCL recorrerá automáticamente todas las formas abiertas, cerrandolas siempre que el CloseQuery deje CanClose en True. Si alguna no puede cerrarse, el proceso se detiene en ese momento, evitando asi que se cierre la aplicación.

Cita:
Empezado por sur-se
Las dos "MDI base" son totalmente diferentes.
Bueno... también comparten el hecho de ser ambas mdi.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita