• Sábado 14 de Diciembre de 2024, 14:54

Autor Tema:  Cambiar Funcionalidad Ontimer Dinámicamente  (Leído 1692 veces)

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Cambiar Funcionalidad Ontimer Dinámicamente
« en: Martes 10 de Julio de 2007, 19:38 »
0
Hola, llevo atascado un par de días con el siguiente problema:

Tengo que implementar, para un conjunto de TTimers que creo dinámicamente, una función OnTimer diferente. El caso es que he probado a crear una función e intentar asignársela, pero no acepta parámetros y al hacer
Código: Text
  1. Timer[i]->OnTimer = (TNotiryEvent) &NuevoOnTimer(cadena);
  2.  
, con "cadena" como char *, da error de tipos. El error que da concretamente es el siguiente:
Código: Text
  1. [C++ Error] Supervisor.cpp(65): E2109 Not an allowed type
  2.  
Por lo tanto, no sé como hacerlo. Si alguien lo sabe, lo agradecería muchísimo.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Cambiar Funcionalidad Ontimer Dinámicamente
« Respuesta #1 en: Martes 10 de Julio de 2007, 21:30 »
0
Esto te deberia servir.
http://www.angelzeitoune.com.ar/cpp/eventos.html

Por sierto, tienes una falta de letra, Es TNotifyEvent, no TNotiryEvent  (en el casing).

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Cambiar Funcionalidad Ontimer Dinámicamente
« Respuesta #2 en: Martes 10 de Julio de 2007, 21:34 »
0
perfect! me sirve!!!! Muchísimas gracias. Tu también tienes una falta  :lol: : es casting, no casing  :whistling:

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Cambiar Funcionalidad Ontimer Dinámicamente
« Respuesta #3 en: Miércoles 11 de Julio de 2007, 20:21 »
0
Hola de nuevo Enko. He estado mirando eso bien, y trabajando me di cuenta de que realmente no sirve esto, no? Lo digo porque estamos definiendo eventos para una clase ( en el ejemplo ) potencia, que construimos nosotros. Lo que ocurre es que yo uso los TTimers que ya estan definidos, y que, tienen su evento OnTimer que es del tipo TNotifyEvent, que solo acepta un parámetro que es el Sender. Y necesito pasarle otro parámetro, entiendes?

¿Se puede solucionar el problema? gracias!

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Cambiar Funcionalidad Ontimer Dinámicamente
« Respuesta #4 en: Miércoles 11 de Julio de 2007, 21:27 »
0
Lo que ocurre es que no vas a poder pasarle otro parametro que no sea el Sender. Es así como funciona la VCL.
Lo que podes hacer es usar una variable global, o bien, una variable miembro de TForm1.

Citar
casting, no casing
Si, tenia esa duda, no me acordaba bien el nombre y dudé entre las dos. Me decidí por la que estaba mal.

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Cambiar Funcionalidad Ontimer Dinámicamente
« Respuesta #5 en: Miércoles 11 de Julio de 2007, 21:32 »
0
Se me ocurre como solucion hacerle que la propiedad Name de cada TTimer sea un indice, y luego, en el propio método, que se acceda al vector global, haciendole el casting de AnsiString a int y ala...pero qué limitación más grande!!!!!

En cualquier caso, habría que investigar, pero la propiedad insertComponent no podría funcionar? No sé, esque intuitivamente me parecio que se podían agregar cosas a la clase...

Saludos y gracias!

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Cambiar Funcionalidad Ontimer Dinámicamente
« Respuesta #6 en: Jueves 12 de Julio de 2007, 19:59 »
0
Sigo atascado...alguna solución??

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Cambiar Funcionalidad Ontimer Dinámicamente
« Respuesta #7 en: Jueves 12 de Julio de 2007, 21:38 »
0
No conozco C++, pero te puedo pasar el codigo como sería con Delphi.
No es mas complicado que esto:
Código: Text
  1.  
  2.   TForm1 =  class(TForm)
  3.    public
  4.        Timer1 : TTimer;
  5.        MyVar: Integer;
  6.        procedure MyTimer(Sender: TObject);
  7.    end;
  8.    .............
  9. procedure MyTimer(Sender: TObject);
  10. begin
  11.    if Sender is TTimer then //esta condicion por lo general no hace falta.
  12.    begin
  13.         //aca va lo que necesites.
  14.         MyVar := X + Y + Z;
  15.    end;
  16. end;
  17.    .............
  18.    Timer1.OnTime := MyTimer;
  19.  
  20.