![]() |
Función virtual...
Como ejemplo, cuando uso un objeto de la VCL, sé que puedo hacer algo como esto:
Código:
procedure TForm.MiObjetoOnEvento1(Sender: TObject);Ahora requiero declarar una función en el código de una forma (TForm), y luego, al ejecutar esa función, dependiendo de cierto parámetro, quiero que se ejecute un código diferente reasignando el código de la función, así: Código:
if Tag = 1 thenSé también que podría implementar un código alternativo, pero de verdad requiero una solución como la solicitada. Gracias, si alguien puede colaborarme. |
Hola mlara.
Te olvidaste de poner cuál es el error que recibís del compilador, pero me jugaría la cabeza a que el problema es de tipos incorrectos. Esto se debe a que el compilador interpreta que vos querés llamar a la función y asignarle el resultado a tu evento. Solución:
El arroba le dice a Delphi explicitamente que vos querés asignar la dirección de memoria de tu función, y no el resultado de llamarla Espero te sirva. Saludongos. |
Hola, creo que el error lo tienes por definicion de tipos. Antes que nada, lo que estas comentando con los eventos es posible porque son procedures, no estoy seguro si lo que te pondre va tambien con funciones, si eso lo pruebas :D
Algo asi. No se si funcionaria porque creo que los punteros a funciones, no a procedures, se aplican tal como te dice Lord Delfos. De todas maneras, este codigo siguiente si que te funcionaria :
Espero te sirva de ayuda. Un saludo. |
Hola mlara.
Me llama la atención que no funcione... debería. Por lo que hice una prueba simple y me funciona bién. Aunque no lo aclaras, creo que no te dá un error sino que simplemente no se ejecuta el código... Me parece que el problema lo tenés en la evaluación del Tag. Probá esto: .Un PopupMenu asignado a la propiedad PopupMenu del Form. .En el PopupMenu,tres Menuitems 'nil', 'OnChange1', 'Onchange2' y en sus eventos OnClick asignado: itOnChangeClick .Por último un Edit.
Tecleá en el edit seleccionando las opciones del PopupMenu...:) Saludos. |
Cita:
Saludos! |
Hola.
Y ya que estamos con los punteros a funciones y a métodos, este es el ejemplo anterior implementado con puntero a método. (como para no dejar las cosas a medias... :) )
Saludos. |
Perfecto...
Agradezco a todos su colaboración... fue muy útil, tanto que a partir de ahí tomé la decisión de usar el siguiente código:
... y funciona a la perfección. Prácticamente el problema era la declaración, incluso el lugar de la declaración. Me estaba enredando un poco con la teoría de funciones virtuales, pero como no estaba derivando ninguna clase me quedé barado, pero ahora todo está bien. Gracias nuevamente. |
| La franja horaria es GMT +2. Ahora son las 09:07:36. |
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