Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2003
miriarteen miriarteen is offline
Registrado
 
Registrado: ago 2003
Posts: 2
Poder: 0
miriarteen Va por buen camino
Como publicar una propuedad TClass

Buenas,

Tengi un componente registrado en el cual quiero que una de sus propiedades published sea de tipo TClass. No quiero guardar un objeto de este tipo, sino una clase concreta. Es decir, no quiero guadar un formulario de tipo TForm sino la clase TForm.

El problema es que si defino la propiedad como TClass, esta no aparece publicada en el inspector de objetos. Por cierto la clase pude no estar registrada.

Un saludo,


mikel.
Responder Con Cita
  #2  
Antiguo 02-08-2003
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 21
__marcsc Va por buen camino
Hola,

no estoy muy convencido pero me parece recordar que alguien dijo por este foro que si publicas TFormClass en lugar de TClass sí que te aparecerá y te dejará seleccionar la lista de clases de los forms de tu proyecto. Otra cosa es si esto no te interesa.

En caso que necesites que realmente sea TClass y no TFormClass, te recomiendo que busques en la ayuda el procedimiento RegisterPropertyEditor, que lo que hace es decirle al IDE de Delphi que cuando haya una propiedad de cierto tipo invoque a un editor que has elejido (o creado) tu.

Suerte!
Responder Con Cita
  #3  
Antiguo 02-08-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:12:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi