Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Duda con un array de Timers

Buenas a todos,

Tengo la siguiente pregunta: ¿es posible averiguar en un array de Timers qué elemento del array me ha generado el evento, es decir, si es el Timer que ocupa la posición 1 o el de la posición 2...?

Esto lo necesito sin usar el Tag del Timer ya que lo usaría para otra cosa.

Gracias...
Responder Con Cita
  #2  
Antiguo 15-10-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si todos llaman al mismo evento, basta con utilizar el parámetro Sender para saber qué Timer está haciendo la llamada.
PREGUNTA ¿Seguro que necesitas un array de Timers?

No te bastaría con un único Timer y diferentes Intervalos de tiempo para hacer diferentes cosas?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 15-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Gracias por tu respuesta Neftali, pero yo lo que necesito es saber la posición que ocupa en el array.

Necesito diferentes Timer y como mucho uno por cada elemento q tenga. Necesito actualizar una serie de elementos en función de un tiempo que me controlará estos Timer. No los tendré creado de inicio, sino que los crearé y liberaré conforme se vayan usando.
Responder Con Cita
  #4  
Antiguo 15-10-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Para la posición del array sólo se me ocurre que busques por TAG, porque la búsqueda secuencia, siempre será peor.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 15-10-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Se me ocurre que al momento de crearlos le des un nombre significativo, por ejemplo Timer+PosiciónenArray.

Código Delphi [-]
   ...
   ArrayTimer[Posicion] := TTimer.Create()
   TTimer(ArrayTimer[Posicion]).Name := 'Timer'+IntToStr(Posicion);
   ...


Luego en el evento OnTimer:

Código Delphi [-]
begin
   {Name = TimerNNN - PosicionEnArray = NNN}
   posicionEnArray := StrToInt(copy(TTimer(Sender).Name,6,length(TTimer(Sender).Name-5)));
   ...
end;
Responder Con Cita
  #6  
Antiguo 15-10-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
Hoal vejerf, yo también utilizaría la propiedad Tag, le asignas la misma posición en la que estas creando tu timer y en su evento OnTimer preguntar por su Tag que sería la posición.

Código Delphi [-]
   ArrayTimer[Posicion] := TTimer.Create(Self);
   ArrayTimer[Posicion].Tag := Posicion;
   .........
   ArrayTimer[Posicion].OnTimer := TimerE1;
 
procedure TForm1.TimerE1(Sender: TObject);
begin
 showmessage(IntToStr(TTimer(Sender).Tag));
end;

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
  #7  
Antiguo 15-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Muchas gracias por vuestras sugerencias...

Me ha gustado tu solución duilioisola aunque debo probarla.

Caro, el problema es que yo ya uso la propiedad tag para otra cosa.

La cosa es que tengo un array de elementos que debo actualizar según el tiempo que tengan definidos. Entonces, lo que se me ocurrió es crearme un array de Timer y colocarlos en la misma posición que su elemento correspondiente, de forma que encontrando la posición del timer que genera el evento tengo el elemento asociado. El tag lo uso para hacer referencia a otro elemento.

Otra solución a mis problemas sería crearme un componente nuevo descendiente de TTimer y con las propiedades que yo necesito, pero es q no sé bien como hacerlo. Lo mismo investigo por ahí...

Muchas gracias de nuevo!!!
Responder Con Cita
  #8  
Antiguo 15-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo usaría la opción de Caro, es la más prolija. Ahora, el que uses el Tag para otra cosa no es realmente un impedimento, basta añadirle un poco de imaginación al asunto . La propiedad Tag es un entero y, como tal, puede hacer las veces de apuntador, de manera que puedes definirte una estructura de datos con toda la información que requieras asociar al timer:

Código Delphi [-]
type
  PTimerInfo = ^TTimerInfo;
  TTimerInfo = record
    Indice: Integer;
    {
      aquí un campo por cada dato o referencia
      extra que requieras guardar
    }
  end;

Para asociar una de estas estructuras al timer:

Código Delphi [-]
var
  P: PTimerInfo;

begin
  New(P);
  P.Indice := 84;
  Timer84.Tag := Integer(P);
end;

Para usar la información contenida en el tag:

Código Delphi [-]
var
  P: PTimerInfo;

begin
  P := PTimerInfo(Timer84.Tag);
  ShowMessage(IntToStr(P.Indice));
end;

Y para liberar la memoria:

Código Delphi [-]
Dispose(PTimerInfo(Timer84.Tag));

Si te fijas, de hecho, en TTimerInfo puedes incluso guardar directamente la referencia al elemento que quieres actualizar, sin necesidad del índice.

// Saludos
Responder Con Cita
Respuesta



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
Duda con Record o Array Paulao Varios 2 23-08-2008 15:11:42
Duda con string i array adrall Varios 4 01-07-2008 03:29:17
duda: pasar array de estructuras entre forms distintos waremovil C++ Builder 9 04-12-2007 23:19:08
Timers b3nshi Varios 5 07-04-2005 01:48:40
Duda en utilizar 2 Timers para comunicacion paralelo ibstk Varios 2 05-08-2004 03:59:26


La franja horaria es GMT +2. Ahora son las 02:34:01.


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