| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
best_guitar Lt


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Dom 01 Feb, 2009 10:55 pm Asunto: eventos sobre objetos dinamicos |
|
|
Hola chicos,
estoy intentando crear una libreria de fisica.
El problema es que tras crear la clase cvector en la que se realizan todas las operaciones sobre estos y los visualizo en el formulario intento crear una clase cmovil para visualizar puntos en movimiento.
No se si de planteamiento ya lo estoy enfocando equivocadamente pero soy incapaz de encontrar una solucion sencilla.
El tema es el siguiente:
la clase cmovil tiene las propiedades :
Estado estado;
double posX;
double posY;
TTimer Tiempo; //esta la he puesto como publica.
cvector *velocidad;
cvector *aceleracion;
Lo que quiero es que se generen eventos de OnTimer cada 100ms y se calcule la siguiente posicion del punto. Este cálculo ya está realizado pero no se como entrar en juego la variable Tiempo.
Habia pensado crear una clase Lista de cmoviles y recorrerlos uno a uno calculando su siguiente posicion a partir del evento onTimer de un TTimer creado en tiempo de diseño.
¿Me recomendariais una solucion mejor?
¿Es posible programar el evento onTimer de un objeto creado en tiempo de ejecucion?
Gracias siempre. _________________ Be water my friend. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 02 Feb, 2009 3:42 am Asunto: |
|
|
Lo que necesitas es usar un TTimer dentro de tu clase ? si es así:
| Código: | class MiClase
{
TTimer* timer;
void __fastcall Evento(TObject* Sender);
public:
MiClase();
~MiClase();
};
MiClase::MiClase()
{
// Creamos el TTimer
timer = new TTimer(0);
timer->Interval = 100;
timer->OnTimer = Evento;
timer->Enabled = true;
}
MiClase::~MiClase()
{
// Lo destruimos
delete timer;
}
void __fastcall MiClase::Evento(TObject* Sender)
{
// Cada 100 ms.
} |
|
|
| Volver arriba |
|
 |
best_guitar Lt


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Mar 03 Feb, 2009 7:17 am Asunto: |
|
|
Gracias Leo por la respuesta.
Finalmente montaré una lista dinamica de moviles puntuales, obedeciendo a un solo timer creado en fase de diseño.
Pero me sale otra duda a partir de la solucion que me has dado. Tengo unos metodos para dibujar los puntos en los que llamo al canvas del Form1.
¿Como puedo llamar a estas funciones desde dentro del evento void __fastcall Evento (TObject *Sender)? ya que el parametro que se pasa es TObject y yo necesito TCanvas.
Gracias. _________________ Be water my friend. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 03 Feb, 2009 3:09 pm Asunto: |
|
|
El parámetro que pongo es así porque el evento 'OnTimer' lo requiere (aunque no lo uses). Serviría por ejemplo para asignar el mismo evento a varios timers y con 'Sender' (remitente) diferenciarlos.
Tendrías que pasar el valor del Canvas del Form a tu clase:
| Código: | class MiClase
{
TTimer* timer;
TCanvas* canvas;
void __fastcall Evento(TObject* Sender);
public:
MiClase();
~MiClase();
void SetCanvas(TCanvas* c);
};
MiClase::MiClase() : canvas(0)
{
// Creamos el TTimer
timer = new TTimer(0);
timer->Interval = 100;
timer->OnTimer = Evento;
timer->Enabled = true;
}
MiClase::~MiClase()
{
// Lo destruimos
delete timer;
}
void __fastcall MiClase::Evento(TObject* Sender)
{
// Cada 100 ms.
if (canvas)
canvas->Rectangle(10, 10, 100, 50);
}
void MiClase::SetCanvas(TCanvas* c)
{
canvas = c;
} |
Y luego usar el metodo 'SetCanvas' para asignarlo desde dentro del Form. |
|
| Volver arriba |
|
 |
|