Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2016
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Recuperación información a través de RTTI

Hola

Leyendo sobre RTTI me surge alguna duda que quiero plantear (realmente creo que no he entendido claramente el concepto y pido disculpas si la consulta no tiene sentido).

Para conseguir a través de RTTI información sobre un determinado objeto (tipo, propiedades, etc) ¿es necesario que el objeto esté creado?, o la información se toma de la contenida en el propio ejecutable.

Si RTTI toma la información del ejecutable ¿RTTI podría suministrar la información necesaria para crear una copia de un objeto?. Si es así alguno de vosotros me puede pasar un pequeño ejemplo de recuperación mediante RTTI de las caracteristicas de un objeto simple para su clonacion (si no es demasiado complicado lo que pido).

Gracias por vuestro tiempo y atención. Un saludo
Responder Con Cita
  #2  
Antiguo 25-04-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
La respuesta a la primera duda es: se toma de la información contenida en el programa ejecutable.

Para la segunda cuestión, la solución dependerá del caso concreto. ¿Qué tienes en mente al respecto de la clonación?
Responder Con Cita
  #3  
Antiguo 25-04-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Se puede recuperar informacion tanto de una clase como de un objeto creado

Aca hay un ejemplo

Estrictamente hablando, se obtiene la informacion de la clase (o el tipo), por ejemplo una propiedad o un metodo

Luego, se puede usar dicha propiedad o metodo y ejecutarlo sobre una instancia en particular para obtener el valor de la propiedad, ejecutar el metodo, etc
Responder Con Cita
  #4  
Antiguo 26-04-2016
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Hola

Ante todo gracias a ambos, ahora me queda mas claro.

Cita:
Para la segunda cuestión, la solución dependerá del caso concreto. ¿Qué tienes en mente al respecto de la clonación?
Intento explicar la consulta que hice, aunque después de vuestras aclaraciones creo que no es posible lo que prentendo.

Con RTTI se puede conseguir la información de un tipo determinado (por ejemplo TButtons).

Mi consulta es sobre la posibilidad de conseguir, a través de RTTI, la información de los valores de las propiedades, de los métodos llamados, etc. en un botón determinado, que esté definido en la aplicación, pero todavía no esté instanciado (por ejemplo un botón que tenga la propiedad visible definida a falso y que el evento onclick llame a un determinado método)

Un saludo
Responder Con Cita
  #5  
Antiguo 26-04-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Si que se puede obtener el valor de las propiedades usando RTTI

Cita:
Empezado por jocaro Ver Mensaje
Mi consulta es sobre la posibilidad de conseguir, a través de RTTI, la información de los valores de las propiedades, de los métodos llamados, etc. en un botón determinado, que esté definido en la aplicación, pero todavía no esté instanciado (por ejemplo un botón que tenga la propiedad visible definida a falso y que el evento onclick llame a un determinado método)
Un boton con Visible a False y con un manejador en el evento OnClick es un boton instanciado

A que te referis con "definido pero todavia no instanciado"?

Lo mas cercano que se me ocurre a eso es una variable TButton a la cual aun no llamaste a su constructor
Responder Con Cita
  #6  
Antiguo 27-04-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Tal vez se refiere a extraerlo del recurso DFM.
Responder Con Cita
  #7  
Antiguo 27-04-2016
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Cita:
A que te referis con "definido pero todavia no instanciado"?
Definido en el código fuente de la aplicación. No instanciado en la ejecución de la aplicación, en el momento en que queremos recuperarlo a través de RTTI.

Cita:
Tal vez se refiere a extraerlo del recurso DFM
Es algo que he estado mirando, TReader y TWriter, pero en este caso me refiero a la información que contenga el ejecutable y que pueda ser recuperada con RTTI
Responder Con Cita
  #8  
Antiguo 27-04-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jocaro.
Cita:
Empezado por jocaro Ver Mensaje
Definido en el código fuente de la aplicación. No instanciado en la ejecución de la aplicación, en el momento en que queremos recuperarlo a través de RTTI.
No me queda claro a partir de que y que información deseas obtener...

Mediante RTTI, se puede obtener información sobre un objeto existente en tiempo de ejecución. De allí creo que viene la pregunta de Agustín, ya que si aún no existe una instancia de clase u objeto, no tiene sentido tratar de obtener información hacerca de él.

Si bién es cierto que la clase define el estado interno y la implementación de un objeto, no es posible obtener información a partir una instancia de clase inexistente. Resumiendo, no se puede obtener información de algo que no existe.

¿ Podrías dar un ejemplo concreto de algún objeto e información que quieras obtener ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 27-04-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Creo que se refiere a los componentes que se colocan en tiempo de diseño
Responder Con Cita
  #10  
Antiguo 27-04-2016
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 ecfisa Ver Mensaje
no se puede obtener información de algo que no existe.
Esto me recuerda una atinada frase de nuestro compañero dec: "Lo que no se puede, no se puede, y, además, es imposible".

LineComment Saludos
Responder Con Cita
  #11  
Antiguo 28-04-2016
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Hola

Después de las primeras explicaciones de Al y Agustin, creo haber entendido la filosofía de RTTI y, como ya os decía anteriormente creo que lo que planteaba no era posible

De todos modos como parece que no ha quedado clara mi consulta, la intento explicar con mas detalle por si este tema sirve de ayuda para otro interesado en el futuro.

La situación sería la siguiente: En tiempo de ejecución puedes conseguir información de tipos a través de RTTI (Buttons, Treeview, Forms, etc. ). Cuando se está creando la aplicación puedes introducir la creación de un objeto bien en el código o en el .frm de la unidad y, cuando ejecutemos la aplicación, dicho objeto se creará al crear el form en el que está o cuando el programador decida crear la instancia; mi consulta era si podiamos conocer la información de las propiedades y métodos que tiene definidos ese futuro objeto, antes de que sea creado (pero sus propiedades y métodos están definidos en el código de la aplicación), a través de la información que se puede acceder a través de RTTI, o bien esa información antes de crear el objeto no puede ser accedida por RTTI o simplemente no existe.

Es decir "Lo que no se puede, no se puede, y, además, es imposible".

Muchas gracias por vuestro tiempo y el interés en ayudarme. Un saludo

Última edición por jocaro fecha: 28-04-2016 a las 09:51:23.
Responder Con Cita
  #12  
Antiguo 28-04-2016
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
Pero ya te han comentado que esa información se encuentra almacenada en el DFM, y el DFM se almacena como recurso en el ejecutable así que, en principio, sí puedes obtenerla. Lo que no queda clarao -sigue sin quedar claro- es qué es lo que quieres hacer. Sé que te has esforzado en explicarlo, pero, siceramente, no te entiendo. Creo que lo mejor sería que expusieras un caso de uso específico para saber qué es lo que quieres lograr.

LineComment Saludos
Responder Con Cita
  #13  
Antiguo 29-04-2016
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Ejemplo: Un pequeño gestor de información con dos forms

El form 1 tiene una funcion principal (recoger los datos necesarios para abrir una base de datos y llamar al form 2) y un menú con varias utilidades (usadas de vez en cuando)
El form 2 tiene como función gestionar notas que almacena en una tabla de la base de datos. Para ello utiliza un treeview, un dbrichedit (contendidos en el DFM de la Unit), etc., con los cuales presentar dichas notas, editarlas, borrarlas, etc

Consulta: Una de las utilidades del form 1 hace un tratamiento de la tabla que guarda las notas. Para ello necesitaría un dbrichedit prácticamente igual al del form 2 (en el momento de ejecutar la utilidad, el form 2 no está creado y por lo tanto el dbrichedit tampoco)
¿En este caso se puede recuperar del ejecutable (RTTI, DFM...) la información de las propiedades y eventos del dbrichedit del form 2 y utilizarlos para crear un objeto dbrichedit en el form 1?
Si es así agradecería un pequeño ejemplo
Un saludo
Responder Con Cita
  #14  
Antiguo 05-05-2016
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Cita:
Empezado por jocaro Ver Mensaje
Ejemplo: Un pequeño gestor de información con dos forms
El form 1 tiene una funcion principal (recoger los datos necesarios para abrir una base de datos y llamar al form 2) y un menú con varias utilidades (usadas de vez en cuando)
El form 2 tiene como función gestionar notas que almacena en una tabla de la base de datos. Para ello utiliza un treeview, un dbrichedit (contendidos en el DFM de la Unit), etc., con los cuales presentar dichas notas, editarlas, borrarlas, etc
Consulta: Una de las utilidades del form 1 hace un tratamiento de la tabla que guarda las notas. Para ello necesitaría un dbrichedit prácticamente igual al del form 2 (en el momento de ejecutar la utilidad, el form 2 no está creado y por lo tanto el dbrichedit tampoco)
¿En este caso se puede recuperar del ejecutable (RTTI, DFM...) la información de las propiedades y eventos del dbrichedit del form 2 y utilizarlos para crear un objeto dbrichedit en el form 1?
Si es así agradecería un pequeño ejemplo
Un saludo
¿Aclara este ejemplo la idea de lo que quiero lograr?
Gracias y un saludo
Responder Con Cita
  #15  
Antiguo 08-05-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Para algo así podrías intentar con los marcos (frames). Son como formularios pequeños que contienen uno o más componentes establecidos con el diseñador de Delphi. En tiempo de ejecución puedes re-crear cualquiera de esos marcos e insertarlo en un formulario. Así haces en Delphi un sólo diseño y almacenamiento del DBRichEdit, que luego, al ejecutarse el programa, lo cargas e introduces en el formulario donde lo requieras, tantos DBRichEdits como necesites, incluso trabajando simultáneamente.

De hecho, sin ir tan lejos, puedes insertar los frames desde tiempo de diseño: diseñas un sólo marco y lo insertas en varios formularios antes de compilar.

Busca "TFrame" en Google, añadiendo la opción site:www.clubdelphi.com (encontrarás más de mil resultados).

Aunque te aconsejo que posteriormente revises a fondo el diseño de esa aplicación. ;-)

Última edición por Al González fecha: 08-05-2016 a las 04:10:37.
Responder Con Cita
  #16  
Antiguo 10-05-2016
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Para algo así podrías intentar con los marcos (frames). Son como formularios pequeños que contienen uno o más componentes establecidos con el diseñador de Delphi. En tiempo de ejecución puedes re-crear cualquiera de esos marcos e insertarlo en un formulario. Así haces en Delphi un sólo diseño y almacenamiento del DBRichEdit, que luego, al ejecutarse el programa, lo cargas e introduces en el formulario donde lo requieras, tantos DBRichEdits como necesites, incluso trabajando simultáneamente.

De hecho, sin ir tan lejos, puedes insertar los frames desde tiempo de diseño: diseñas un sólo marco y lo insertas en varios formularios antes de compilar.

Busca "TFrame" en Google, añadiendo la opción site:www.clubdelphi.com (encontrarás más de mil resultados).

Aunque te aconsejo que posteriormente revises a fondo el diseño de esa aplicación. ;-)

Hola

Miraré esta opción en cuanto pueda. No la conocía y parece interesante para resolver la situación que planteaba.

Mis referencias anteriores a un ejemplo donde se utilizara RTTI o la información del DFM en ejecución para crear un DBRichEdit son, sobre todo, para aprender y ahondar en las posibilidades y prestaciones que ofrecen y la forma de accederlas.

Gracias de nuevo por tu ayuda y un saludo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Herencia externa de componentes (BPL)(RTTI) jednavlop OOP 4 05-11-2010 19:37:14
Obtener información de hardware a través de API's de Windows (no componentes) n3mohack API de Windows 7 15-10-2010 14:21:12
Acceder al objeto asociado a una prop. (RTTI) Neftali [Germán.Estévez] Trucos 0 30-05-2007 14:39:22
Saber si un comp. tiene una propiedad (RTTI) Neftali [Germán.Estévez] Trucos 0 30-05-2007 14:32:45
Recuperacion de informacion Tablas paradox andresenlared Tablas planas 1 14-08-2004 14:08:10


La franja horaria es GMT +2. Ahora son las 16:19:24.


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