Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Uso de codigo dinámico (https://www.clubdelphi.com/foros/showthread.php?t=27141)

edalmasso 12-11-2005 22:24:11

Uso de codigo dinámico
 
Buenas, les tengo una pregunta...

Necesito la forma de poder recorrer(iterar) los elementos de un objeto de una clase creada por mi y poder asignarles valores en forma dinamica.

Yo he vuelto de VB y lo hacia de esta forma


Código:

  public sub Asignar(pObjeto as TCliente)
      for each mPropiedad as Object in pObjeto.Gettype.PropertyList
          callbyname(pObjeto, mPropiedad.Name, "Juan Perez")
      next
 
  end sub

Quisiera saber como implemento el CallByName para llamar a propiedades de un objeto por una cadena "ClienteNombre".
Y como recorrer todas las propiedades .
Y si es posible un ejemplo.
Se entiende?

Les agradezco de antemano, saludos
Eduardo

edalmasso 14-11-2005 02:35:45

:confused: Alguna idea?? pliss:D

Neftali [Germán.Estévez] 14-11-2005 09:56:45

Es un tema que salió hace unos días en los foros (y algunas otras veces anteriormente); Lo que necesitas se puede hacer vía RTTI.
En éste truco tienes el código para obtener todas las propiedades de un componente y cómo asignarles un valor a partir del nombre.

De todas formas busca información sobre RTTI por internet y encontrarás más opciones.

Lepe 14-11-2005 10:23:17

http://www.clubdelphi.com/foros/show...hlight=typinfo

Despues de leer en ese hilo, ya podrás buscar por el foro por cosas más concretas.

saludos

edalmasso 14-11-2005 21:41:49

No quiere...
 
Probe el código y funciona perfectamente para componentes pero lo necesito para objetos creados de clases hechas por mi.
Tambien probe con las funciones de TypInfo, pero creo los objetos bien y cuando le voy a asignar cualquier propiedad, me dice q la propiedad no fue encontrada, debe la clase heredar o implementar alguna interfase?

Ejemplo:
Teniendo las siguientes clases
TPaciente = Class
Nombre : String;
end;

TMate = Class
TieneBombilla : boolean;
end;

Necesito algo asi:
function AsignarPropiedad(pObjeto : TObject; pPropiedad: String; pValor:TObject);
begin
pObjeto.pPropiedad := pValor; //eso como se hace????
end;


y correrlo de la siguiente forma:
begin
Mate := TMate.Create; //para mate
AsignarPropiedad(Mate, 'TieneBombilla', 0);

Pacietne := TPaciente.Create;
AsignarPropiedad(Paciente, 'Nombre', 'Pablito');
end;

Muchas gracias y los felicito por la calidad del soporte y la calidad de las respuestas.
Saludos!:rolleyes:

jachguate 14-11-2005 22:01:09

Hola edalmasso, no entiendo por que repetir aqui el mismo mensaje ya publicado por vos en este otro hilo :confused:

Te invito a elegir uno de los dos hilos para que permanezca tu mensaje y borrar el que no salga favorecido. En todo caso, si los dos hilos tienen relación, crear un vínculo entre ellos.

Hasta luego.

;)

edalmasso 14-11-2005 22:04:41

Este es el q queda, me confundi y lo repondi primero en el otro hilo
Saludos

Neftali [Germán.Estévez] 15-11-2005 10:26:36

Cita:

Empezado por edalmasso
Probe el código y funciona perfectamente para componentes pero lo necesito para objetos creados de clases hechas por mi.

Debe funcionar con propiedades de componentes estandard o de clases hechar por tí, siempre que las propiedades estén definidas como published; Es una condición ineludible para utilizar RTTI;

Si tienes propiedaes de tus clases definidas como public, pásalas a published y con eso será suficiente.


La franja horaria es GMT +2. Ahora son las 05:56:43.

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