Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Como obtener las variables de un objeto

Hola amigos mi consulta es la siguiente. dado un objeto cualquiera
ej :
Código Delphi [-]
type
MyObjeto = Class(TObject)

Private
_Data : TDataset;
_Serial: Tlist;
_Floop: TObject;
Public
function   Extv : Double;
Procedure opc1;
Procedure opc2;
End;
Como puedo obtener una referencia a las variables declaradas en este

algo asi como

Var
M : MyObject;
..
..
for i:=0 M.Variables.Count-1 do
...
.
.


Ando en busca de un simil de components o controls, pero que me liste las variables contenidas en mi objeto (no los componentes ni los controles).

Cualquier sugerencia se agradecera.

Saludos.
Responder Con Cita
  #2  
Antiguo 07-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hasta donde yo llego es posible acceder a las propiedades de un objeto siempre que estas sean públicas; es posible enumerar sus propiedades, "recorrerlas", acceder a sus valores e incluso cambiarlos, pero, tratando con variables... no se me ocurre la forma.

Además creo que lo que planteas es cuando menos raro. Quiero decir que es posible que existan otras soluciones para lo que quieres conseguir. Si lo explicas tal vez alguien pueda echarte un cable.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 07-06-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Dec gracias por tomarte la molestia de responder a mi incognita lo que puedo agregar a mi consulta es lo siguiente "dado un objeto cualquiera, recorrer sus variables una a una" .
Tengo una funcion que realiza un proceso sobre las variables (dependiendo de su tipo) de los objetos , pero cada objeto que proceso aunque decienden de la misma clase , en su implementacion cada uno tiene sus propias variables.

Ejemplo :

Código Delphi [-]
type
TFormExta :  TClass  = (TForm)
.
.
.
Private
.
.
Public
a : Tipo1;//-> esta variable quiero capturar
b : Tipo2;//-> esta variable quiero capturar
c : Tipo3;//-> esta variable quiero capturar

end;

TFormExtb :  TClass  = (TForm)
.
.
.
Private
.
.
Public
d : Tipox;//-> esta variable quiero capturar
e : Tipoy;//-> esta variable quiero capturar
 f  : Tipoz;//-> esta variable quiero capturar
end;


MyProc (Obj :TForm) 
Begin
¡¡¡¡¡¡¡¡aqui tengo que recorrer el Obj y analizar cada variable!!!!!!!!!!!
.
.
.
End;

Var
A : TFormExta;
B : TFormExtb; 
C : TFormExtb; 
Begin
MyProc (A); 
MyProc (B); 
MyProc (C); 
End.


Espero haber aclarado mas el asunto.
Saludos
Responder Con Cita
  #4  
Antiguo 07-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues no sé que se pueda acceder a las variables de un objeto, aun siendo estas públicas. Lo que sí sé es que puede accederse a las propiedades de un objeto, mediante Run-time Type information. Tal vez deberías plantearte añadir propiedades a tus objetos. O tal vez algún otro compañero sepa darte una respuesta mejor.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 07-06-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Gracias por tus comentarios DEC, ya habia intentado por el lado de la RTTI pero no he logrado encontrar la solucion.

Espero que a alguien se le ocurra algo.

Saludos
Responder Con Cita
  #6  
Antiguo 07-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Con RTTI me parece que sólo podrás acceder a la propiedades publicadas (published). Por curiosidad, ¿qué es lo que quieres hacer? Vamos, que no es usual querer hacer algo así en un lenguaje como delphi.

// Saludos
Responder Con Cita
  #7  
Antiguo 07-06-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Hola Roman, la finalidad es que me estoy fabricando un recolector de basura, no lo queria mencionar porque las respuestas se podrian desvirtuar (ej: se podria prestar para que hicieran comentarios de como maneja la memoria delphi, los modelos de memoria, que delphi no necesita un garbage collector,etc. y ese tipo de cosas) y apuntar a otro punto el cual tengo cubierto.

Vamos Roman como en esa gran sabiduria acumulada de mas de 11.000 mensajes no habra algo que me ayude .

Saludos.
Responder Con Cita
  #8  
Antiguo 07-06-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Roman y Dec se han fijado en el Code Explorer de Delphi 7?

hay tres secciones

private

public

published


En esta ventana muestra las variables que quiero recuperar, si el IDE de delphi lo puede mostrar y el IDE esta hecho en Delphi enconces se puede hacer , el problema es como.

Saludos.
Responder Con Cita
  #9  
Antiguo 07-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Si no quieres que entremos, pues no entramos. Pero, se supone que un objeto que se encarga de inicializar ciertas variables debe encargarse de su destrucción. Para eso están los métodos constructores y destructores de un objeto. ¿No?

Entonces el "garbage colection" que planteas (según a mí se me ocurre) en qué consiste, ¿en liberar determinadas variables de un objeto (o varios) desde fuera de estos? ¿Pero no es más natural destruir los propios objetos que a su vez se encargarán de liberar las variables que sean menester?

Ahora, que si no quieres entrar... no entramos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 07-06-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Ves Dec que sucedio lo que yo dije, no queria caer en la discucion de quien debe o no liberar la memoria (en lo cual estamos totalmente de acuerdo) y porque es necesario un recolector de basura. ahora estoy obligado a explicar mas en detalle lo que intento hacer, pretendo liberar de la memoria variables u objetos Activex que estan declarados dentro de un formulario o un objeto cualquiera. y tu me diras pero no se supone que estos Activex se liberan por si solos o con un metodo dispose? y yo te dire que lo que sucede es que estos activex generan un memory Leak ya que no estan muy bien implementados o carecen de un dispose y encontre una forma de liberarlos, pero quiero automatizar el proceso y no estar referenciandolos uno a uno, es por eso que necesito recorrer cualquier objeto y comprobar si hay en el una variable u objeto de tipo "activex" y si es asi lo libero.

Saludos.
Responder Con Cita
  #11  
Antiguo 07-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.287
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
El truco 42 se titula: "Mostrar las propiedades de uncomponente en Runtime", aunque vale perfectamente para cualquier otro objeto.
Usa RTTI que es la única forma de hacerlo sin programar nada especial (NOTA1); Lo más importante para hacerlo así es que las propiedades que deseas recorrer sean published.

En el caso que has puesto:

Código Delphi [-]
TFormExtb :  TClass  = (TForm)
.
.
Private
.
.
Public
  d : Tipox;//-> esta variable quiero capturar 
  e : Tipoy;//-> esta variable quiero capturar
  f  : Tipoz;//-> esta variable quiero capturar
end;

Habría que modificarlo para que fuera así:

Código Delphi [-]
TFormExtb :  TClass  = (TForm)
.
.
Private
  _d : Tipox;//-> esta variable quiero capturar 
  _e : Tipoy;//-> esta variable quiero capturar
  _f  : Tipoz;//-> esta variable quiero capturar
Published
  property d:Tipox read _d write _d;
  property e:Tipoy read _e write _e;
  property f:Tipoz read _f write _f;
end;
Aunque habría que saber más de lo que necesitas hacer.
(NOTA1) La otra opción, si consigues que todas las clases deriven de una clase base, es programar en la clase Base una lista de variables/propiedades y que cada una de las clases derivadas añada las suyas en el Create (por ejemplo). En la clase basedeberás programar el método que recorra la lista y te las devuelve (no se si me explico...)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 07-06-2007 a las 17:26:43.
Responder Con Cita
  #12  
Antiguo 07-06-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Cita:
Empezado por TEO127
Roman y Dec se han fijado en el Code Explorer de Delphi 7?

hay tres secciones

private

public

published


En esta ventana muestra las variables que quiero recuperar, si el IDE de delphi lo puede mostrar y el IDE esta hecho en Delphi enconces se puede hacer , el problema es como.

Saludos.
Según tengo entendido, el Code Explorer de Delphi lo que hace es interpretar el código fuente del archivo que está activo en el editor.


Saludos...
Responder Con Cita
  #13  
Antiguo 07-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.287
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por TEO127
...En esta ventana muestra las variables que quiero recuperar, si el IDE de delphi lo puede mostrar y el IDE esta hecho en Delphi enconces se puede hacer, el problema es como.
La diferencia es que el IDE lo hace en Diseño y tú lo quieres hacer en ejecución.
No es lo mismo.
Aunque no lo se de cierto, estoy casi seguro de que maeyanes tiene razón. En ese caso se hace "parseando" los .PAS
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 07-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Más que el Code Explorer, supongo que se refiere al Browser. Y éste sí que muestra las secciones privadas, protegidas, públicas y publicadas, aun en ausencia del .pas

¿Cómo hace esto?

// Saludos
Responder Con Cita
  #15  
Antiguo 07-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.287
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman
Y éste sí que muestra las secciones privadas, protegidas, públicas y publicadas, aun en ausencia del .pas
No se a qué te refieres cuando dices "en ausencia del PAS".
Yo creo que debe hacer algo similar a este.
(1) Pulsad Load para cargar el PAS.
(2) Pulsad el botón que pone "Code Tree".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 07-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali
No se a qué te refieres cuando dices "en ausencia del PAS".
Me refiero a eso, a que si inserto una componente en el formulario, del cual sólo tengo los dcus, el browser sí me lista todas las propiedades de la componente.

Cita:
Empezado por Neftali
Yo creo que debe hacer algo similar a este.
(1) Pulsad Load para cargar el PAS.
(2) Pulsad el botón que pone "Code Tree".
Lo probaría encantado, pero desafortunadamente, todo el ancho de banda disponible está reservado a sus usuarios premium ¿No tenías tú un ftp en el club?

// Saludos
Responder Con Cita
  #17  
Antiguo 08-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.287
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman
¿No tenías tú un ftp en el club?
Sí veo que Megaupload los últimos días está dando problemas de este tipo... Habrá que cambiar a otro...
No lo había subido al FTP, porque no es algo que tenga interés fuera de este hilo; De todas formas he creado una carpeta temporal para este tipo de cosas; link.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #18  
Antiguo 08-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.287
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman
Me refiero a eso, a que si inserto una componente en el formulario, del cual sólo tengo los dcus
Bueno con los DCU's también se puede hacer algo similar. Link. Se hace de otra forma, pero sigue siendo un "parseo".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear variables de tipo Objeto!! rodrigo19 Varios 2 26-05-2007 02:40:14
Obtener lista de procedimientos de un objeto JavierSotillos OOP 15 09-06-2006 17:53:52
Como crear un objeto en Delphi ? Delphiboy OOP 3 31-01-2006 20:39:15
Como guardar un objeto en un archivo ? cmurua71 OOP 7 18-11-2005 21:26:30
Obtener Handle de un objeto senpiterno Varios 6 22-04-2004 15:21:40


La franja horaria es GMT +2. Ahora son las 13:26:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi