[DELPHI] Migotanie ListView

0

Witam, mam kodzik którym scrolluje ListView, za pomocą odzielnego Scrollbara:

OnScroll
=======

  if MainList.Items.Count>25 then //MainList to ListView
    begin
    {Scrolling}
    MainList.Refresh;
    ScrollMax:= SendMessage(MainList.Handle, LVM_GETCOUNTPERPAGE, 0, 0);
    ScrollBar.Max:= ScrollMax + (MainList.Items.Count-50);
    SendMessage(MainList.Handle, LVM_ENSUREVISIBLE, 0, 0);
    SendMessage(MainList.Handle, LVM_ENSUREVISIBLE, ScrollPos + ScrollMax - 1, 0);

    {Move gauges}
    MainList.Refresh;
    for I:=0 to MainList.Items.Count-1 do
      begin
      LI:=MainList.Items.Item[I]; //LI to TListItem
      TsGauge(LI.Data).Top:=LI.Top+1; //sGauge to rozbudowana wersja Gauge
      end;
    end;

Kod działa, ale podczas przewijania okno ListView dziwnie migocze... Ustawiłem mu DoubleBuffered na true, poprawiło się znacznie (a jakieś 70%). Dorzuciłem też te refreshe (dzięki nim Srollowanie odbywa się trochę wolniej a przez to mniej miga). Mnie to jednak nie zadowala (bo nadal widać to migotanie przy szybszym przewijaniu).

Ktoś ma pomysł jak się tego pozbyć?

PS. Co dziwne, przy większej liczbie elmentów migocze tylko pierwsze 25-26 z nich. To znaczy gdy przewinę tak że widać w nim elementy od 27 do 51 (okno programu ma niezmienny rozmiar, zawsze widać 25 elementów), to dalsze przewijanie przebiega już normalnie. Potem gdy wracam do góry nadal jest OK, ale migotanie znowu się zaczyna od elementu 26 aż do pierwszego...

0

Wykomentuj to i sprawdź

SendMessage(MainList.Handle, LVM_ENSUREVISIBLE, 0, 0);

wiem, że wtedy będzie źle przewijało w górę ale gdyby to wyeliminowało problem migotania to przewijanie w górę można zrobić inaczej.

0

Spróbuj ustawić
MainList.DoubleBuffered := true; i zobacz czy to poprawi sytuację. Jak nie to spróbuj scrolować za pomocą MainList.Scroll(x,y);

0

Witam wszystkich.

Sorki, że podpinam się po temat.

Jak za pomocą zewnętrznego scrolla przewijać DBGrid ?

[EDIT]

NIEAUKTUALNE :)

0

Legalnl
Nie doczytałeś, napisałem w poście że już ustawiłem DoubleBuffered i pomogło w znacznym stopniu, ale nie do końca wyeliminowało problem... ;]

Z MainList.Scroll(x,y) próbowałem wcześniej, ale jakoś nie udało mi się tego podpiąć pod Scrollbar. Znaczy się, wiem że na pewno się da, ale strasznie dużo z tym problemów bo przesunięcie następuje nie do danego indexu, tylko o daną ilość indexów - a to kolosalna różnica...

kAzek
Niestety nic nie pomogło... Mnie intryguje to że miga tylko pierwsze 25 elemntów (czyli tyle ile widać zaraz po dodaniu do MainList). Te które są niżej (czyli normalnie są niewidoczne), w czasie scrollowania zachowują się poprawnie...

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