Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

eventos sobre objetos dinamicos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: eventos sobre objetos dinamicos Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.