![]() |
Modificar propiedad del un componente
Amigos, tengo el siguiente problema, necesito armar en tiempo de ejecucion, de acuerdo al componente que elija el usuario, el nombre del componente y concatenarle la propiedad que quiero modificar. Por ej, tendria que poder armar lo siguiente cuando hago click sobre un componente:
TControl(Sender).Top La propiedad que tendria que modificar del componente seleccionado la obtengo de un archivo ini. Lo que no encuentro la forma de resolver es si por ej, hice click sobre un Label y en el archivo ini lei que tengo que modificarle la propiedad Top y Left, es como armo lo siguiente TControl(Sender) + .Top donde 'Top' lo lei del archivo ini TControl(Sender) + .Left donde 'Left' lo lei del archivo ini Espero haber sido claro en la explicacion, desde ya muchas gracias. |
Hola,
como ves, la funcion SetOrdProp sirve solo para establecer propiedades integer, existe tb las SetStrProp, SetMethodProp, etc... (y sus correspondientes GetStrProp, GetOrdProp,... todas indocumentadas :/ ) deberás encontrar el tipo de la propiedad a modificar antes de usar una u otra. Investigando he encontrado que se puede hacer de manera general, pero se usan punteros directos al objeto y parece bastante mas complicado. Te pongo tb una funcion para encontrar toda la lista de propiedades de un objeto. Desde esta funcion, seguro que puedes determinar el tipo de la propiedad que buscas
Venga, espero q te sirva ;) PD : links a Free Pascal, http://www.freepascal.org/docs-html/...bjectprop.html |
Caso deberías informar que para usar estas funciones hay que declarar la unit TypInfo en el uses.
Saludos. |
cierto es xEsk :D
|
Gracias a ambos, es lo que estaba necesitando!!!!!
|
La info que me pasaron me vino de maravillas, pero tengo otro problema, cuando la propiedad que deseo modificar/leer es una subpropiedad de una propiedad no lo puedo hacer. Por ej si lo que quiero es modificar la propiedad 'size' de la propiedad 'font' de un tlabel, las funciones SetOrdProp, GetOrdProp no encuentran esa propiedad, o bien me estoy equivocando en como le paso el parametro. He probado con
SetStrProp(TControl(Sender), 'size', 10); y con SetStrProp(TControl(Sender), 'font.size', 10); y no me reconoce ese nombre de propiedad. Tambien estoy usando GetPropInfo y no la encuentra. GetPropInfo(TControl(Sender).ClassInfo,'size'); Alguna idea de como debo referenciarla??? |
;) |
| La franja horaria es GMT +2. Ahora son las 00:18:21. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi