Ir al contenido


Foto

Un TCollection en una "subpropiedad"


  • Por favor identifícate para responder
3 respuestas en este tema

#1 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 17 julio 2012 - 10:18

Buenas,

A ver si logro explicarme. Estoy haciendo un componente (como no) y éste tiene una propiedad que es un objeto (TPersistent). Vamos, como la propiedad Constraints de muchos componentes visuales.

Bien, esta propiedad TPersistent va a tener una TCollection y aquí está el "problema".

Las TCollection, en el inspector de objetos tienen ese botoncito con los 3 puntos que abre la ventana de la colección, pero (y aquí está el "problema"), eso sólo funciona cuando su Owner es un TComponent (y en mi caso es un TPersistent).

La solución sería hacer que la propiedad fuera un TComponent, pero claro, queda "feo" en el Inspector de Objetos.

Mirando el código fuente de Dephi, he visto que el editor de las TCollection se llama desde la clase TCollectionProperty, el método Edit del cual está definido así



delphi
  1. procedure TCollectionProperty.Edit;
  2. var
  3.   Obj: TPersistent;
  4. begin
  5.   Obj := GetComponent(0);
  6.   while (Obj <> nil) and not (Obj is TComponent) do
  7.     Obj := TPersistentCracker(Obj).GetOwner;
  8.   ShowCollectionEditorClass(Designer, GetEditorClass,
  9.     TComponent(Obj), TCollection(GetOrdValue), GetName, GetColOptions);
  10. end;



Creo que el problema viene de este método que, como veis, busca por los TComponent. He intentado redefinir este método pero sin resultados satisfactorios.

¿Alguna idea de cómo poder "lanzar" el editor del TCollection desde una propiedad de un TPersistent?

Gracias

  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 17 julio 2012 - 10:35

Me respondo a mi mismo jejejejeje

http://stackoverflow...persistent-prop

EDITO:

Para dar un poco más de información. Como se ve en el primer mensaje, TCollectionProperty.Edit hace una llamada al método GetOwner. Este método está implementado en TPersistent, pero el detalle que no me había fijado es que en TPersisten lo único que hace es devolver nil. Redefiniendo este método y haciendo que retorne el objeto que toca, tema solucionado

Nos leemos

  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 18 julio 2012 - 09:02

Saludos.

@cadetill, he estado "bregando" con el ejemplo original:
Enlace1
[ur=http://delphi.about.com/library/bluc/text/uc092501c.html]Enlace2[/url]

Tengo problemas con las colecciones, y es que los item del collection se borran cuando salvas la forma, cierras el proyecto y vuelves ha abrirlo, ahí se desaparecen.

¿Crees que me puedas echar una mano?


Tal como dice NGLN, el ejemplo original tiene suficientes bugs como para volver loco a cualquiera.
Ya se por donde resolver mi problema...

Gracias de todos modos por el enlace.
  • 0

#4 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 18 julio 2012 - 11:56

Bueno, si sigues teniendo problemas, dímelo y lo miramos entre los dos a ver si sacamos algo en claro :)

Nos leemos
  • 0




IP.Board spam blocked by CleanTalk.