Ver Mensaje Individual
  #3  
Antiguo 02-08-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
andres1569 Va por buen camino
Hola:

Lo que dice Marcsc de que se comentó en estos foros sobre poner TFormClass y que aparecían los Forms disponibles en la unit donde estábamos ubicados, sé que se trató en los foros históricos, pero no recuerdo que se determinara que aquello funcionara, en mi opinión no, puesto que no es lo mismo tener una propiedad de tipo TClass que de tipo Objeto, en esta última Delphi sí tiene el mecanismo para mostrar en una lista los objetos creados que están a tu disposición.

El problema es que no puedes publicar una propiedad del tipo TClass (lo puedes hacer pero no te la mostrará el Object Inspector, eso ya lo has podido comprobar), ni tampoco Delphi la va a almacenar en el fichero .DFM. Lo que sí puedes es crear una propiedad, llamémosla ClassStr así:

property ClassStr : string read GetClassStr write SetClassStr;

En los métodos de lectura y escritura buscas la forma de obtener/guardar en modo cadena la Clase que estás tratando, e internamente la almacenas en una variable FClass de tipo TClass. Ello supone tener un mecanismo que te haga las conversiones, y luego, como te comenta Marcsc, crear un editor de propiedades que permita devolver una lista con todas las clases candidatas (ese editor de propiedades devuelve una lista TStrings, es decir una lista de cadenas, al Object Inspector). El método GetClassStr sería muy fácil de implementar, algo así:

result := FClass.ClassName;

Para el método SetClassStr, en el que tendrías que obtener la clase a partir de una cadena, la cosa es algo más complicada. Te aconsejo mirar los procedimientos FindClass y GetClass de la unit classes, que devuelven un TPersistentClass (¿Suficiente para lo que quieres?) de las clases registradas. Si, como dices, puede que no estén registradas pero conoces las clases candidatas, lo ideal es que tengas una especie de Lista donde las almacenes junto a su descripción, parecido a como Delphi registra las clases. Esa lista se crearía en la seccion Initialization y ahí se le añadirían las clases junto a su nombre descriptivo, que normalmente será Class.ClassName.

Muy recientemente se ha tratado un tema similar, donde al final Roman, desde lo más profundo de la vagancia pero sin perder su punch, ha aportado una forma de crear formularios a partir de una fábrica. La fábrica de forms almacena una lista de clases de formularios, que debemos encargarnos de registrar (¡ojo!, registrar en esa lista, nada que ver con la opción RegisterClasses de Delphi), para luego poder obtener una instancia del formulario deseado indicándole el nombre del mismo. Aquí tienes el link:

http://www.clubdelphi.com/foros/show...?threadid=2656

En tu caso sería algo parecido, además supongo que almacenas una clase para más tarde crear objetos de esa misma clase, así que te puede servir.

Espero que este rollo te haya aportado algo de luz, si no es así me retiro.
__________________
Guía de Estilo
Responder Con Cita