Ver Mensaje Individual
  #2  
Antiguo 02-03-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
yelian, asumiendo que el TTrayIcon al que te refieres es el ejemplo que viene en el Builder, y teniendo claro este asunto para los interesados en este hilo, te diré que ese Componente no es mas que un ejemplo de como implementarlos en C++ Builder. Como ejemplo, puede estar un poco deficitario y de hecho lo está.

El problema que expones se deriva de un bug, si así queremos considerarlo.

En el código fuente podemos encontrar la función miembro que se encarga de animar el cursor:
Código:
//---------------------------------------------------------------------------
void __fastcall TTrayIcon::DoOnAnimate(TObject *Sender)
{
   if (IconIndex < FIconList->Count)
      FIconIndex++;
   else
      FIconIndex = 0;

   SetIconIndex(FIconIndex);
   Update();
}
Si te fijas, la condición de fin de iconos es incorrecta, pues tras incrementar el indice FIconIndex, éste puede ser igual a FIconList->Count. Es decir apunta a un icono que no existe. Este es el motivo de que desaparezca el icono entre el último y el primero.

Para corregir este bug, basta con dejarlo así:
Código:
//---------------------------------------------------------------------------
void __fastcall TTrayIcon::DoOnAnimate(TObject *Sender)
{
   if (IconIndex < FIconList->Count - 1)
      FIconIndex++;
   else
      FIconIndex = 0;

   SetIconIndex(FIconIndex);
   Update();
}
Saludos.

Última edición por escafandra fecha: 02-03-2009 a las 19:28:57.
Responder Con Cita