![]() |
cómo agregar propiedades "published" a un componente desde afuera del mismo?
Alguien ha logrado publicar propiedades de un compoente desde afuera de la clase para que en designtime se vean desde el object inspector?
Les cuento. Tengo un componente de un tercero que le quiero agregar 2 propiedades: un string y un booleano y no quiero andar parcheando el código ajeno (aunque sé que es muy fácil) cada vez que sale una nueva versión... inclusive se pudiera dar el caso de que sucediese con otros componentes de los cuales no tuviera código alguno. Intenté con los Class Helpers que, pesar de su nombre, no me ayudaron para nada :confused:.
Arriba puse mi último intento (que incluso lo puse dentro del mismo unit donde está la clas TXObject). Como verá las propiedades no usan Fields para el GET y SET ya que los Class helper lo no soportan. Probé de varias maneras pero sigo sin poder lograrlo... alguien pudo hacer algo parecido alguna vez? |
¡Hola Poyo!
Gusto en saludarte. La solución es crear una clase derivada (herencia). ;) La verdad es que no comprendo del todo el planteamiento, ¿quieres extender una clase sin crear una derivación de ella ni modificar su código fuente? :confused: |
Entiendo que no quieras modificar el código fuente de TXObject; lo que no entiendo es porqué no heredas de él un nuevo componente al cual agregar las propiedades que quieras.
// Saludos |
Cita:
A ver si se ve más gráficamente: a / / \ \ b c d e // \\ // \\ fg hi jk lm Yo quiera expandi "a" y que las clases f,g,h,i,j,kl y m vean los cambios... pensé que los classhelpers podrían ser la solución pero creo estar equivocado. Además, si a futuro apareciesen nuevos componentes derivados de estos últimos, ésto quedarían extendidos. me parece que va a ser más fácil gerar un .patch por ahora... |
Sigo sin entender. ¿por qué no creas un componente TXObjectExentended, derivado de TXObject al cual añades las propiedades deseadas, y del cual heredas todas las demás, b, c, d, e, f, g, h, etc.
Si en un futuro cambias la versión de TXObject, no afectas a los restantes porque éstos heredan de TXObjectExtended. // Saludos |
Cita:
Yo uso b, c, d, e, f, g, h, etc. e inclusive a esta otra librería de componentes que se basa en la primera. |
Ah, ahora sí te comprendo Poyo. Pues precisamente eso es a lo que yo llamo herencia insertada, pero desafortunadamente no existe en Delphi y creo que pocos lenguajes de programación lo tienen.
Alguna vez Román me comentó en otro hilo (busca "herencia insertada") que Java Script (no Java, aclaro) sí tenía esa capacidad, pero no he estudiado cómo es eso ahí. :) |
Cita:
Yo he visto hacer cosas como estás.... (no lo de la "herencia insertada", pero sí lo de agregar la propiedad publicada). lástima que estoy corto de tiempo para investigar... a ver... (desempolvando links agendados... y luego de toser un poco por el polvo...) Para aquellos que les interese acá hay una punta: http://blogs.codegear.com/abauer/2007/02/24/32322 http://hallvards.blogspot.com/2007/0...a-part_11.html http://dn.codegear.com/article/33448 Lo estube chusmeando un poco y es algo engorroso. en DesignIntf.pas está definido ISelectionPropertyFilter (de paso lean el comentario que hay en el Unit) la idea es implementarlo para manipular la lista de propiedades del objeto, ya sea para agregar como para quitar. Es interesante las cosas que se pueden hacer (como ser, opcionalmente, mostrar u ocultar propiedades o categorías de las mismas) Para agregar es lo engorroso. Lo que no me queda claro lo de Streaming (habitualmente persistencia mediante .DFM) usando: TPersistent.DefineProperties(Filer: TFiler); virtual; Si bien entiendo cómo y para qué es esa función, no veo cómo aplicarlo en este caso, si al form o a la clase... si es a la clase, la tengo que modificar o se puede hacer con un Class Helper? habrá que probar... Será para cuando pueda. Buen fin de semana. Me voy a pasarla al Delta del Rio Paraná de la Palmas. |
La franja horaria es GMT +2. Ahora son las 07:01:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi