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.

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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