100% uzycia CPU podczas kolorowania Listy w zdarzeniu

0

Witam
Chodzi o sytuacje kiedy w zdarzeniu OnBeforeCellPaint (lub podobnym) komponentu VirtualStringTree kolorujemy tlo wiersza lub zmieniamy chocby kolor fonta w danym wierszu.

Np taki fragment kodu, kolorujacy Node jesli jest rozwinieta

     if Sender.Expanded[Node] then begin
         TargetCanvas.Brush.Color := clinfobk;
         TargetCanvas.FillRect(CellRect);
     end;

Uzycie CPU przez aplikacje rosnie od razu do 99%, po wylaczeniu opcji kolorowania aplikacja zachowuje sie normalnie, praktycznie zerowe uzycie CPU.

Ma to sens poniewaz za kazdym "malowaniem' komorki CPU musi sprawdzic warunek a dzieje sie to bez przerwy, stad takie uzycie CPU.
Czy jednak nie mozna tego jakos zniwelowac?
przeciez zadna aplikacja, ktora posiada kolorowanie wierszy nie uzywa 100% CPU

0

a nie ma zdarzenia OnCellPaint ? może spróbuj to tam wrzucić.

0

No niestety, nie ma czegos podobnego jak OnCellPaint. Jest OnBackGroundPaint ale to nie dotyczy komórki tylko calej listy.A wiec z kolorowaniem tla komorki nie kombinowalem.

Testowalem kolorowanie samego fontu w zdarzeniu OnPaintText i okazuje sie ze jesli na liscie wystepuja jednoczesnie dwa kolory tekstu to CPU->100% jesli jeden kolor, ktorego wyznaczenie i tak przechodzi przez funkcje if..then w zdarzeniu OnPaintText to obciazenie CPU spada do 0% :]

DLACZEGO?
-------------------------------------------------------EDIT-------------------------------------------
Przyczyna znaleziona... wyjasnienie dla potomnych.
Do kolorowania tekstu uzywany procedury OnPaintText i koniecznie uzywamy zagniezdzonej w niej zmiennej TargetCanvas czyli TargetCanvas.font.color:=color .. nie Sender.font.color:=color;
W sumie teraz to baaaardzo logiczne ze zjadalo caly CPU :D

close(temat);

1 użytkowników online, w tym zalogowanych: 0, gości: 1