Ver Mensaje Individual
  #8  
Antiguo 17-10-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No puedes

Tal como está pensada, la fábrica almacena referencias TFormClass y, aunque puedes, desde luego, guardar referencias de clases derivadas, no puedes sino usar los métodos y propiedades definidos en TForm. Claro que el polimorfismo de OOP aún te permite usar clases derivadas con métodos redefinidos y todas esas cosas, pero sólo puedes llamar los métodos que ya tienes.

¿Qué hacer entonces?

Fijar tu propio ancestro común; para lo cual haría falta tener organizados turs formularios en una jerarquía de clases. Así por ejemplo tendrías

Código Delphi [-]
type
  TNewtronForm = class(TForm)
  protected or public
  {
    Aquí un montón de propiedades y métodos cool que usan tus formularios
  }
  end;

Tus formularios derivarían de éste y, para que la fábrica funcione necesitas, primero definir un tipo de datos que referencie tu clase de formulario:

Código Delphi [-]
type
  TNewtronFormClass = class of TNewtronForm;

Y en la definición de la fábrica cambiar las referencias a TFormClass por TNewtronFormClass.

En un escenario muy complicado, con formularios de muy diversas índoles, tendrías que crear no una clase base sino posiblemente varias de ellas para agrupar aquellas con características comunes y hacer fábricas para cada grupo.

// Saludos
Responder Con Cita