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...