Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acceder a una sub-propiedad mediante RTTI (https://www.clubdelphi.com/foros/showthread.php?t=94823)

elrayo76 06-08-2020 04:13:03

Acceder a una sub-propiedad mediante RTTI
 
Buenas gente,


Estoy trabajando con RTTI para acceder a las propiedades de los componentes y luego setear o devolver su valor. Todo funcionaba bien hasta que me encontré con algo que no le estoy encontrando la vuelta.


Tengo un componente que tiene algo como esto: Properties.ReadOnly como propiedad que se puede ver desde el inspector de objetos. Si se presiona sobre el signo mas se despliegan las propiedades y una de ellas es la que indico.


El tema es que de la forma tradicional no me devuelve ninguna de las propiedades que están dentro de Properties. Comento que he provado con GetPropertyPath pero no me funciona.


¿Alguno sabe como obtener esas propiedades?.


Aclaro que estoy trabajando con Delphi XE8.


Saludos
El Rayo

Casimiro Noteví 06-08-2020 09:37:36

Si al menos dijeras qué componente es.

elrayo76 06-08-2020 13:55:29

Buenas,


Son varios los componentes y son de las DevExpress (TcxCheckBox y TcxTextEdit).


Lo que hago es recorrer todos los componentes del formulario y mediante RTTI buscar la propiedad, si la tiene se la seteo. El tema es que si la propiedad está dentro de una que se despliega con el signo más y estás son las que no devuelve nada, las que están mas afuera como "Transparent" (TcxCheckBox) si funciona.



Saludos,
El Rayo

manelb 07-08-2020 11:28:35

Buenos días a todos....

Pues podrías probar con algo como esto

Código Delphi [-]
var
  c: Tcomponent;
begin
  c:= Button1;

  SetPropValue(c, 'Caption', 'Functiona');
  SetPropValue(c, 'Tag', 25);
  SetPropValue(c, 'Anchors', 'akBottom,akRight');


  SetPropValue( GetObjectProp(c,  'Margins'), 'Bottom', 50);
  SetPropValue( GetObjectProp(c,  'Font'), 'Size', 20);

end;

Debes tener en el uses System.TypInfo

Saludos.

Neftali [Germán.Estévez] 07-08-2020 11:54:35

Creo que primero debes acceder a la propiedad Properties como si fuera un Objeto/Clase.
Fíjate que el tipo:

Código Delphi [-]
  TTypeKind = System.TTypeKind;

Posee un valor:
Código Delphi [-]
  tkClass       = System.TTypeKind.tkClass;

En este caso properties de las DevExpress (por ejemplo para un TcxTextedit) es de tipo TcxTextEditProperties. Una vez accedeas como clase, vuelves a acceder a las propiedades de esa clase como lo haces normalmente.

NOTA: Creo que es similar a lo que ha comentado manel.

elrayo76 07-08-2020 17:12:18

Gracias a los dos por responder.



Veré los dos casos a ver con cual me quedo que me sirva mejor y luego les contaré como me fue.


Saludos
El Rayo


La franja horaria es GMT +2. Ahora son las 11:46:35.

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