Witajcie,
W dniu dzisiejszym natknąłem się na ciekawy problem programistyczny. Udało się go rozwiązać w dość ... nietypowy sposób. W związku z powyższym postanowiłem podzielić się z wami problemem (w oczekiwaniu na wasze rozwiązania) za kilka dni wrzucę również moje rozwiązanie (chyba, że ktoś z was zrobi to tak jak ja).
Mamy TListView w trybie virtualnym
OwnerData = True
Dynamicznie dodajemy do niego itemy (np 10 mln - dlatego jest tryb virtual). Następnie potrzebujemy pobrać zakres wyświetlonych rekordów czyli jeśli forma w obecnym rozmiarze wyświetla 10 rekordów i przeskrolujemy np o 20 rekordów to zakres ma być od 30 do 40. Jak zwiększymy rozmiar to dalej mamy mieć aktualny zakres.
Ktoś mógłby napisać od ręki, że należy użyć zdarzenia OnDataHint gdzie jako parametr zdarzenia mamy StartIndexi EndIndex ALE tego użyć nie można bo przy kliku w dany item StartIndex i EndIndex są równe zaznaczonemu rekordowi. Ponadto musicie wziąć pod uwagę, że ktoś skrolując ListView może użyć scrolla z myszki lub strzałek na klawiaturze, które również w zdarzeniu OnDataHint wyświetlają zakresy odrysowywane, a nie rzeczywisty wyświetlany zakres.
W załączeniu zamieszczam przykładowy projekt do testów oraz screen, który zakłada rozwiązanie (w captionie formy) jakie mnie zadowala bez względu czy klikniemy w ListView, przeskrolujemy paskie z boku, scrolem z myszy, naciśniemy górę/dół na klawiaturze czy np pgup/pgdn lub home/end.
W każdym wypadku ma działać tak jak na moim screenie. Powodzenia