Ver Mensaje Individual
  #1  
Antiguo 23-08-2004
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Reputación: 22
sur-se Va por buen camino
Recorrido de ventanas hijas

Hola. Estoy trabajando con una aplicación MDI en Delphi 5. Tengo definidos dos formularios de tipo MDIChild que utilizo como clases base para los formularios MDI definitivos. Todos los formularios MDI de la aplicación son hijos de estos dos que tengo definidos, y ninguna ventana es directamente alguno de estos dos formularios.

En las clases base he definido un método Puedo_Cerrar de tipo virtual, que nos indica si el formulario puede ser cerrado o no (por encontrarse procesando algo). Estos métodos pueden ser redefinidos (si se desea) en las clases hijas herederas (declarándolos como override).

La cuestión es que al tratar de cerrar la aplicación se recorren todas las ventanas MDIChildren comprobando si pueden cerrarse o no (llamando al método público). El código que utilizo sería el siguiente:

Código:
var cerrar_aplic:boolean;
begin
   for i:=0 to MDIChildCount-1 do
   begin
       if MDIChilren[i] is TMDIBase1 then
           with MDIChildren[i] as TMDIBase1 do
                  if not Puedo_Cerrar then cerrar_aplic:=false;
    
       if MDIChilren[i] is TMDIBase2 then
           with MDIChildren[i] as TMDIBase2 do
                  if not Puedo_Cerrar then cerrar_aplic:=false;
   end;
   if cerrar_aplic then action:=cafree
   else action:=canone;
end;
El problema es que el método Puedo_Cerrar puede haber sido redefinido en la nueva clase hija de alguna de las anteriores por lo que para llamar al método correcto debería poner:
Código:
      if MDIChildren[i] is TMDIHijaBaseX then
          with MDIChildren[i] as TMDHijaBaseX do
                 ....
pero entonces tendría que poner un "if" por cada clase de formularios MDI que defina en mi aplicación. Me gustaría que fuese algo genérico de forma que se llamase al método correcto.
¿Se puede hacer esto de alguna forma? ¿existe alguna otra alternativa?
Gracias.
Responder Con Cita