Ver Mensaje Individual
  #2  
Antiguo 04-06-2005
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
Viendo la ayuda de Delphi hay un objeto que parece adecuado: TComponentList. Una de las funcionalidades que indica la ayuda es la de eliminar automáticamente de la lista las componentes que se destruyen:

Cita:
Empezado por ayuda de Delphi
In addition, TComponentList tracks its components. When a component is freed, TComponentList automatically updates itself by deleting the reference to the freed component and packing the list.
Puedes escoger entre instruir a la lista para que se encargue de la destrucción de sus integrantes o no. En tu caso lo segundo parece lo adecuado.

Así, como pienso que podría funcionarte es declarando en tu componente una propiedad de tipo TComponentList.

Es muy poco lo que he hecho con editores de propiedades pero posiblemente tengas que derivar tu editor de TClassProperty para que aparezca en el inspector de objetos como, por ejemplo, la propiedad Lines de un Memo, en donde sólo aparece el nombre de la clase y un botoncito para abrir el editor.

Siguiendo con la ayuda de Delphi:

Cita:
Empezado por ayuda de Delphi
When the user clicks the '...' button next to the property or double-clicks the value column, the Object Inspector calls the property editor's Edit method.

Within your implementation of the Edit method, follow these steps:
  1. Construct the editor you are using for the property.
  2. Read the current value and assign it to the property using a Get method.
  3. When the user selects a new value, assign that value to the property using a Set method.
  4. Destroy the editor.
Es decir, según la misma ayuda de Delphi, que tienes que redefinir el método Edit del editor y seguir ahí los pasos indicados.

La dificultad aquí será el cómo agregar un elemento a la lista. La lista en sí deberá mostrar los nombres de las componentes pero cuando quieras agregar una tendrás que determinar qué componentes hay en el formulario para escoger una. Posiblemente examinando la propiedad Components del formulario pero no sé cómo se determina cuál es el formulario que contiene a tu componente.

Es muy ambiguo lo que te digo pero espero que te de alguna idea de por dónde entrarle.

// Saludos
Responder Con Cita