FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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); begin ... end; procedure MiEventoAlternativo1(Sender: TObject); begin ... end; procedure TForm.Button1Click(Sender: TObject); begin ... MiObjeto.Evento1 := nil; ... // Aquí hago algo que involucra a MiObjeto y quiero evitar que se ejecute // el código del evento 1, pero más adelante sí necesito que el código // se ejecute, por lo cual hago nuevamente la asignación. ... MiObjeto.Evento1 := MiEventoOnEvento1; ... // Luego, necesito que el código a ejecutar sea otro, pero ante el mismo // evento, por lo cual hago esta otra asignación. ... MiObjeto.Evento1 := MiEventoAlternativo1; ... end; 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 then MiFuncion := MiFuncion1 else if Tag = 2 then MiFuncion := MiFuncion2 else if Tag = 3 then MiFuncion := MiFuncion3 ... // Todas las funciones son de tipo booleano, así que... if MiFuncion then ... else ... Sé 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.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre. Última edición por mlara fecha: 23-08-2010 a las 19:19:37. |
#2
|
||||
|
||||
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. |
#3
|
|||
|
|||
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
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. |
#4
|
||||
|
||||
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. Última edición por ecfisa fecha: 23-08-2010 a las 21:41:46. |
#5
|
||||
|
||||
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#6
|
||||
|
||||
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. Última edición por ecfisa fecha: 24-08-2010 a las 01:01:11. |
#7
|
||||
|
||||
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.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre. Última edición por mlara fecha: 24-08-2010 a las 01:32:49. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
No es un delirio, fue real o "virtual": Funeral virtual que se transforma en masacre! | delphi.com.ar | La Taberna | 42 | 21-06-2007 18:00:59 |
MDI Virtual | isg | OOP | 1 | 16-10-2006 11:18:37 |
Virtual Replay - Repetición Virtual de los Goles del Mundial | delphi.com.ar | La Taberna | 0 | 26-06-2006 17:15:07 |
Virtual PC | fjcg02 | Linux | 2 | 15-12-2004 18:11:18 |
Red virtual | Pablo Carlos | Varios | 4 | 07-08-2004 02:24:31 |
|