[Delphi] VirtualTreeView - co drugi item inny kolor

Odpowiedz Nowy wątek
2006-11-12 11:10
Krzychu0000
0

Witam. Od dłuższego czasu testuję VirtualTreeView, obecnie nie
wyobrażam sobie pracy bez niego, TListView poszło już do lamusa.
Chłopaki pomyśleli o wszystkim, jednak nie mogę uwierzyć, że nie
ma bardzo ważnej dla mnie opcji. Przewertowałem wszystkie metody w
VST ale nic nie dało.
Otóż chcę co drugą linię wyróżniać innym kolorem, tak dla
przejrzystości. W On Cellpaint (cell, nie item bo w niektórych
przypadkach koloruje tylko wybrane komórki) sprawdzam czy
"Odd(Node.Index)=True" (czy jest parzysta) jeżeli tak to koloruje
kolorem 1 jeżeli nie to kolorem 2 . Wszystko ok ale użytkownik mojej
aplikacji ma możliwość sortowania i filtrowania listy przez co
zdarza się, że obok siebie znajdują się Nody o parzystych indexach,
co za tym idzie, kolorowanie jest nieprawidłowe. Jak pobrać
"prawdziwy" index nody znajdującej się na liście?
Chodzi o to:
Node1: index=0
Node2: index=1
Node3: index=2

Teraz np. chowie sobie środkową node metodą VST.IsVisible[Node2] :=
False. Jak teraz zrobić żeby indexy miały taką formę:
Node1: index=0
Node3: index=1

A nie taką:
Node1: index=0
Node3: index=2

Najlepiej żeby nie wymagało to prze indeksowania wszystkich nodów bo
na liście mam około 10 000 rekordów :) . Dodam że AbsoluteIndex zwraca mi to samo co Index, a myślałem że to jest to czego szukam. ProceduraBeforeItemPaint też nie działa u mnie tak jak należy :\ .

Z góry dzięki i pozdrawiam

Pozostało 580 znaków

2006-11-14 20:16
0

Po prostu tak:

procedure TfrmMain.VirtualStringTree4BeforeItemErase(
  Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  ItemRect: TRect; var ItemColor: TColor;
  var EraseAction: TItemEraseAction);
begin
  if Odd(Node.Index) then
  begin
    ItemColor := $EBEDF3; // $FFEEEE;
    EraseAction := eaColor;
  end;
end;

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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