FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Obtener lista de procedimientos de un objeto
Hola,
Me guastaria saber como obtener la lista de todos los procedures, function y metodos de un objeto. Gracias |
#2
|
|||
|
|||
En runtime??
Si la respuesta es no, desde el delphi crea un objeto y luego escribe su nombre, pulsa un . y espera a que salga la lista desplegable. Var objeto: TObject; objeto. La ayuda interactiva del delphi hará el resto. La verdad es que salvo leer los manuales, no conozco otra forma. |
#3
|
||||
|
||||
Hola,
En el artículo Run-Time Type Information (RTTI) in Delphi, de Brian Long, se explica bastante bien cómo puede obtenerse información sobre tipos en tiempo de ejecución. No os perdáis el resto de documentación disponible en la página Web de Brian Long. Bueno. A lo que vamos. El caso es que no parece demasiado complicado listar los métodos de un determinado objeto, empero, no estoy yo muy puesto en este tema, y así, únicamente puedo listar los métodos correspondientes a los eventos de un formulario, por ejemplo, tal como se ve a continuación:
Sin embargo, como digo, no he conseguido que me incluya en la lista un procedimiento que he puesto a modo de prueba como privado, público y "published". Es el caso que no entiendo muy bien esto y no sé porqué no me lista el método que yo añado al objeto (al formulario, en este caso). Pero, de cualquier modo, revisa el artículo que te enlazo más arriba, echa un vistazo a la unidad "TypInfo", busca en estos Foros y en Internet en general lo que puedas sobre RTTI (Run-Time Type Information) en Delphi y ya nos contarás lo que sea. Última edición por dec fecha: 08-06-2006 a las 18:14:44. |
#4
|
||||
|
||||
Es oportuno aclarar no todos los objetos guardan "Run Time Type Information", solo aquellos objetos que implementen clases que han sido declaradas bajo la directiva {$M} y todas las clases heredadas de estas. (Ref.)
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
||||
|
||||
Hola,
Federico, ¿cómo es posible que si declaro e implemento un método dentro de un bloque "published" de un formulario, al hacer uso del código de más arriba no me aparezca listado dicho método y sí todos los demás ("OnCreate", "OnShow", etc., etc., etc.)? ¿Sabes algo al respecto? ¿Alguien sabe algo? |
#6
|
||||
|
||||
Cita:
Si es del Code Insight, tenes en cuenta que por defecto aparece los métodos, propiedades y eventos ordenados por Scope y no alfabéticamente? Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
||||
|
||||
Hola,
Gracias por responder Federico. Cita:
Es que se me hace muy raro, pero, evidentemente, tiene que haber una explicación que lo aclare todo, vamos, digo yo. |
#8
|
||||
|
||||
No te entiendo.. no los ves cómo?.. usando Rtti??.. tenes el código??
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#9
|
||||
|
||||
Hola,
Cita:
Ese código lista en un "Memo" todos los métodos del formulario en que se encuentra,... ¿todos? No, un irreductible método que yo mismo declaro e implemento en el bloque "published" del formulario no aparece listado en el "Memo1". |
#10
|
||||
|
||||
Cita:
En una componente, las propiedades- que no métodos: OnCreate no es un método es una propiedad -publicadas quedan registradas en el IDE al momento de registrar el paquete con RegisterComponents. Pero si añades propiedades publicadas a un formulario, éstas no las detecta el IDE, es decir, no se publican así nada más, puesto que para empezar no hay ningún punto donde uses RegisterComponents. Para registrar un formulario con el IDE, y que, por tanto, el inspector de objetos publique sus propiedades, necesitas usar RegisterCustomModule. Los detalles puedes verlos en la página de gexperts en la sección de Open Tools. Busca el apartado que dice How can I add published properties to a TForm descendent?. No sé hasta qué punto tenga que ver una cosa con la otra pero no pierdes nada investigándole. // Saludos |
#11
|
||||
|
||||
Cita:
// Saludos |
#12
|
||||
|
||||
Hola,
Observa el "TTypeKind" Román, el que se utiliza en la sentencia "if" en el código anterior, es decir, se mira si lo que tenemos entre manos es un "tkMethod". Ahora echa un vistazo al artículo de Brian Long y mira lo que dice de este "TTypeKind": Cita:
No sé. La verdad es que creo comprender lo que dices perfectamente Román. Quizás todo esto no es más que producto de la poca información de la que se dispone sobre estas cuestiones. |
#13
|
||||
|
||||
A ver, tkMethod no significa que tengamos un método entre manos, sino que tenemos una propiedad cuyo tipo de datos es un método. Recuerda, por ejemplo, qué esTNotifyEvent:
TNotifyEvent es un tipo de datos; el tipo procedimiento (de objeto). Si te fijas, la misma función que mencionas, GetPropList, justamente, lo que obtiene es una lista de propiedades, no de métodos, sólo propiedades. Cuando haces:
estás aislando sólo aquellas propiedades cuyo tipo de datos es un procedimiento (o función) lo cual incluye todos los eventos (por cierto, se pueden definir eventos que devuelven valores; funciones, aunque nunca he visto uno). En resumen, no es lo mismo método, que propiedad tipo método. Si pones
GetPropList te listará Algo y PasaAlgo (mostrando que lo que mencioné en el mensaje anterior no es cierto) pero no listará HazAlgo. HazAlgo es un método mientras que PasaAlgo es un propiedad. // Saludos |
#14
|
||||
|
||||
Hola,
Cita:
Pues entonces la cosa parece más o menos clara. La cuestión es que debo haber soñado que era posible conseguir también los métodos que no fueran precisamente propiedades... O lo he soñado, o es que en C# sí que es posible hacer esto, es decir, que puedo estar confundiendo lo que es posible en C# (en este caso) y lo que es posible en Delphi. Bueno. La cosa queda más o menos clara, pues. Gracias Román. Lo que no sé yo es que pensará el compañero que inició este Hilo, ya nos contará algo, digo yo. |
#15
|
|||
|
|||
En principio es possible obtener los "published" metodos de una clase.
Pero no es possible obtener la lista de argumentos. (Eso es possible, por ejemplo, para metodos de seccion "automated").
|
#16
|
||||
|
||||
Hola,
Muchas gracias por tu código fuente Rounin. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como Obtener la lista de alias | quetzal | Conexión con bases de datos | 13 | 09-06-2015 20:16:57 |
Obtener lista de ocx registrados | rsantosr | API de Windows | 0 | 08-10-2005 17:50:47 |
Obtener la lista de canciones de un Cd mp3 | Diana | Varios | 1 | 30-11-2004 02:45:26 |
Obtener Handle de un objeto | senpiterno | Varios | 6 | 22-04-2004 15:21:40 |
Obtener lista default charactes set | mosorio | Conexión con bases de datos | 0 | 17-12-2003 13:49:07 |
|