Composant graphique : clignotement génant des bmp
Salut à tous,
J'ai créé un composant graphique pour mon utilisation personnelle à l'aide de ce tuto : http://chgi.developpez.com/compo9/
Ce composant représente un voyant avec trois positions et contient donc 3 images bmp, qui changent en fonction d'une propriété.
Mon souci est que ce composant clignote très rapidement à une intervalle de temps aléatoire, càd pendant quelques millisecondes il disparait puis réapparait, même en mode édition de la form. C'est sûrement dû à un rafraichissement des bmp sur la form.
Ce problème est assez génant quand il y a plusieurs de ce composant sur une form car ces clignotements attirent l'oeil, j'aimerais donc savoir si il n'y a pas une solution pour éviter ca. :roll:
Voici un extrait du code du composant :
le timer sert à éviter d'appeler la méthode "repaint" après avoir changer la propriété "position". Si je ne met pas ce timer le clignotement n'est plus visible
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
__fastcall TLed3Positions::TLed3Positions(TComponent* Owner)
: TGraphicControl(Owner)
{
l_off = new Graphics::TBitmap();
l_off->LoadFromResourceName((int)HInstance, "LED3ETATOFF");
l_on = new Graphics::TBitmap();
l_on->LoadFromResourceName((int)HInstance, "LED3ETATVERT");
l_alarme = new Graphics::TBitmap();
l_alarme->LoadFromResourceName((int)HInstance, "LED3ETATROUGE");
Width = l_off->Width;
Height = l_off->Height;
l_off->Transparent = false;
l_on->Transparent = false;
l_alarme->Transparent = false;
allume = 0;
Timer1 = new TTimer(NULL);
Timer1->Interval = 200;
Timer1->OnTimer = Tempo;
}
//---------------------------------------------------------------------------
__fastcall TLed3Positions::~TLed3Positions()
{
delete l_off;
delete l_on;
delete l_alarme;
delete Timer1;
}
//---------------------------------------------------------------------------
void __fastcall TLed3Positions::Paint()
{
allume = Fmode;
if(allume==0) Canvas->Draw(0, 0,l_off);
else if(allume==1) Canvas->Draw(0, 0,l_on);
else Canvas->Draw(0, 0,l_alarme);
Canvas->Refresh();
}
//---------------------------------------------------------------------------
// Rafraichissement du dessin selon le tempo.
void __fastcall TLed3Positions::Tempo(TObject* Sender)
{
Invalidate();
}
//---------------------------------------------------------------------------
namespace Led3positions
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TLed3Positions)};
RegisterComponents("Leds", classes, 0);
}
}
//--------------------------------------------------------------------------- |
Une idée ? Merci
Marcootz