![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Es más... haciendo esta modificación para manejar el TNotifyEvent en lugar del objeto, consigo obtener el nombre a partir del TNotifyEvent (cosa que no me funcionaba en el componente).
Edito: Acabo de ver en Classes.pas que TNotifyEvent = procedure(Sender: TObject) of object... he estado dando vueltas en circulo.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
|
#2
|
||||
|
||||
|
Bueno... a la final no encontré una forma de obtener el nombre dentro del componente y pues agregué al componente un procedimiento para procesar los nombres de las acciones dentro del formulario. Que ahí si funcionaba el obtener el nombre a partir del TNotifyEvent.
En el componente:
y en el programa de pruebas:
De esta manera, ya tengo el nombre de la acción y la podré llevar al XML como lo he intentado desde la semana pasada. Muchas gracias Lepe por tu colaboración. Me queda la duda porque desde el componente nunca pude obtener el nombre.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
|
#3
|
||||
|
||||
|
Cita:
Tal vez es un poco tarde, pero te puede servir. Un método, como valor procedimental (cual es el caso de un TNotifyEvent), consiste de dos punteros o direcciones de memoria: Una es la dirección del método en sí (en qué byte de la memoria inicia su código máquina) y otra es la dirección de memoria del objeto con el que ha de ejecutarse dicho método. Para facilitar las cosas, Delphi cuenta con el tipo genérico TMethod: El campo Code es la dirección de memoria del código ejecutable del método y Data es la dirección de la instancia de objeto con la cual ha de ejecutarse. Puedes hacer un molde de tipo con TMethod para obtener alguno de los dos valores. Ahora, observa lo que dice la ayuda de Delphi sobre MethodName: Cita:
La parte que no se cumple está en "of the object", por lo que MethodName te funcionó solamente cuando lo llamaste con el formulario, ya que el manejador de eventos consultado pertenece a la misma clase del formulario. En pocas palabras no es lo mismo llamar a Formulario.MethodName que a Componente.MethodName. Si tienes un valor método, es decir, Code + Data, y Code es un método publicado, tendrás que preguntarle al objeto Data por el nombre de ese método. Solamente la clase (o las clases) a la que pertenece Data podrá darte su nombre. Entonces, para obtener el nombre del método desde el interior del componente es necesario descomponerlo en su Code y Data, preguntándole a Data cuál es el nombre de Code:
Cabe mencionar que MethodName es un método de clase, es decir, ejecutado por la clase a la que pertenece Data, como si la expresión fuera "TForm1.MethodName (ManejadorDeclaradoEnTForm1)". Para finalizar, decir que a partir de Delphi 2010, gracias a la reflexión extendida (nueva RTTI), algunas de estas cosas pueden realizarse con mayor facilidad. Espero no haberme "enrollado" demasiado. Saludos. Al González. ![]() |
|
#4
|
||||
|
||||
|
Cita:
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#5
|
||||
|
||||
Muy chevere que lo llamen a uno por su nombre de pila en la internet ... Y no un rollo como este era el que necesitaba. Además que queda como referencia para muchas otras personas que puedan tener la misma duda.Dejame decirte que ayer cuando ví la respuesta me gustó muchisimo leerla, ya era muy tarde y no hice las pruebas. Pero acabo de hacer la modificación al SetEvento y funciona muy bien. De verdad que gracias no solo por ayudarme a resolver el problema, sino a entender porque sucedia. Cita:
![]() ![]() ![]() ![]() ![]() ![]() ![]() Muchas gracias.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
|
#6
|
||||
|
||||
|
En estos días, pocas cosas relacionadas con la programación me dan tanto gusto como saber que he escrito algo que le sirve a otras personas. A colegas Delphi que por ser diversas razones pueden acceder a la realización profesional que a otros se nos niega.
Por cierto, aun en Internet somos personas con nombre, apellido y sentimientos. Suelo nombrar a mis amigos como ellos prefieran, de la misma manera en Internet como presencial y telefónicamente. ![]() Saludos y que bueno que ha servido de algo mi intervención. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| String a Cadena de Bytes a cadena Hexadecimal | ruedabeat2003 | Varios | 2 | 11-01-2012 02:04:06 |
| Convertir cadena aleatoria en cadena de N caracteres | DANY | OOP | 3 | 12-03-2009 20:49:21 |
| Funcion para borrar la cadena que aparesca repetida dentro de otra cadena | flystar | Varios | 1 | 02-07-2007 23:51:10 |
| Funcion para buscar cadena dentro de otra cadena y el numero de veces | flystar | Varios | 3 | 02-07-2007 22:48:08 |
| Buscar cadena dentro de otra cadena | doverzhoff | Varios | 4 | 27-01-2004 05:27:15 |
|