Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Problemas con la creación de TTimer es tiempo de ejecución

Muy buenas a todos.
Estoy desarrollando una aplicación en el que una serie de elementos que vamos dando de alta hacen uso de los componentes TTimer. Mi problema es que a medida que voy dando de alta esos elementos necesito crearme un TTimer propio para ese elemento. Apriori parece que lo hace y le asigna una dirección de memoria al componente TTimer correspondiente y cambio la propiedad TTimer.Interval sin problemas, pero cuando lo habilito TTimer.enable:= true me da una excepción y me dice lo siguiente: 'Not enough timers available'.
Esto sólo ocurre durante esa ejecución. Cuando vuelvo a ejecutar la aplicación y ese elemento que ya había sido dado de alta antes se carga en memoria, ya tiene reservado su timer y no me da problemas.
Después de toda esta historia mi pregunta es: ¿Es que no se pueden crear timer en tiempo de ejecución?
Espero vuestra ayuda. Muchas gracias!!!
Responder Con Cita
  #2  
Antiguo 14-04-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Me sigo respondiendo un poco yo mismo y aunque sigo con dudas puede que le ayude a alguien mis conclusiones, aunque no soy un programador experto.

En la ayuda de Delphi viene que se puede crear los timer en tiempo de ejecución así que mi pregunta anterior ya está contestadas... pero ahora la pregunta es en qué estaba fallando antes...
Pues bien sugiero una cosa a ver q responden los expertos.
Al dar de alta un elemento como decía en mi primer mensaje hago lo siguiente:
Código Delphi [-]
with TAgregarUnidadForm.create(nil) do
try
    if ShowModal = mrOk then
    begin
       //Aqui se dan de alta las unidades y sus timers
    end;
  finally
    free;
end;

En el form que he llamado TAgregarUnidadForm hago:
Código Delphi [-]
    Medios[N].Timer := TTimer.Create(self);

Nunca he sabido bien para q sirve el self que inserto en el Create. La verdad es que cuando comencé a programar lo vi en un ejemplo, lo usé y como funcionaba siempre lo hacía igual, pero ahora creo q sé para qué es.
Si no me equivoco asocia el Timer creado con ese formulario y yo al liberarlo con el free pierdo el timer.
¿Algún experto me puede decir si lo q digo tiene sentido y es así?

Creo q me servirá a mí y a muchos otros. Gracias...
Responder Con Cita
  #3  
Antiguo 14-04-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Poder: 0
grandmasterdari Va por buen camino
Post Intento de solucion

yo soy de c++, pero creo que igual puede ayudar esto.
Hice un TTimer en tiempo de ejecucion de esta forma

en la definicion de la clase de TForm1 en la parte public deberas definir

Código:
    TTimer *Timer1;

y en la implementacion (por ej: en button1click) colocar
Código:
Timer1=new TTimer(this);
Timer1->Interval=1;
Timer1->OnTimer=Timer1Timer;
donde en la primer linea instanciamos lo que definimos arriba y decimos que el padre es el componente que lo contiene
la segunda linea colocamos el intervalo, si colocas en 1 teoricamente tendras un llamado a
"void __fastcall Form1::Timer1Timer(TObject *Sender)"
cada 1 milisegundo, y si colocas 1000 tendras por cada segundo
la tercera linea asignas el evento para este componente, este evento debe tener la forma de TNotifyEvent y sera llamado cada vez que se cumpla el tiempo definido en "Timer1->Interval" (Timer1.Interval en delphi)

Última edición por grandmasterdari fecha: 14-04-2008 a las 15:28:22.
Responder Con Cita
  #4  
Antiguo 14-04-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola vejerf, sobre la palabra clave Self, nos sirve para hacer referencia al objeto actual que en tu caso sería tu formulario. Cuando creas un componente en tiempo de ejecución debes asignarle el propietario de dicho componente en su constructor. Así como lo hiciste, donde el propietario de tu Timer sera tu formulario y con Seft haces referencia a dicho formulario

Código Delphi [-]
 Medios[N].Timer := TTimer.Create(self);

Sobre la liberación, cada vez que se crea un objeto es necesario liberar, pero como hemos creado un componente y le hemos asignado un padre, que en tu caso es el formulario, este formulario es el que se encarga de liberar todos sus componentes, por lo que ya no necesitas liberar tu Timer.

Si estoy mal, ya nos corregiran.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
QuickReport y creacion de paginas en tiempo de ejecución Torreblanca Impresión 2 19-12-2007 06:49:44
creacion de tabsheet del controlpage en tiempo de ejecucion ercrizeporta Varios 6 01-03-2007 14:38:07
Creación de componentes en tiempo de ejecución jymy788 Varios 2 27-01-2005 18:22:20
Creación de tabla en tiempo de ejecución sledgehammer Conexión con bases de datos 3 16-09-2003 16:08:01
Creacion de componente en tiempo de ejecución cone220 OOP 1 16-09-2003 04:47:16


La franja horaria es GMT +2. Ahora son las 13:17:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi