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
Une idée ? Merci
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); } } //---------------------------------------------------------------------------
Marcootz
Partager