Witam. Mam poważny problem z TListBoxem. Postaram się go opisać
Mam włączony multiselect, używam tego komponentu w trybie lbVirtualOwnerDraw, wszystkie funkcje są obsłużone odpowiednio i ListBox korzysta z mojej struktury danych. Mam też własne sortowanie przy dodawaniu nowych elementów (nie wiadomo z góry gdzie się pojawi nowy element).
Mój problem polega na tym, że gdy użytkownik zaznacza i scrooluje liste w momencie gdy zachodzi jakaś zmiana na liście (przypisywany jest element ListBox->Count), całe to zaznaczenie znika, a lista jest przewijana na początek.
Co tu jeszcze dodac... używam BCB6.
Myślałem przez pare dni nad tym problemem i mam pare rozwiązań, ale nie za dobrych:
-
Zrobić we własnej strukturze danych nowy element isSelected (pamietaj, ze multiselect jest mozliwy) i przy rysowaniu odpowiednio go stosowac. Cos takiego + zapamietywanie ItemIndex daje mozliwosc zapamietania elementów, problem jest nadal ze scroolowaniem - w tym wariancie nie wiem do konca jak sie uchronic przez przewijaniem lub jak zapamietac polozenie suwaka (?) i scroolowac po odswiezeniu w miejsce w ktorym był przed odświezaniem. Ten wariant jednak, nawet jesli sie to uda zaimplementowac, ma wade (chwilowe mrugniecie przy odswiezaniu co bedzie zauwazalne pewnie)
-
Zrezygnowac z trybu wirtualnego ale nadal korzystac z mojej struktury danych przy rysowaniu (bardzo mi sie ten pomysl nie podoba bo lista znacznie zmniejszy wydajnosc).
-
Zablokowac scroolowanie listy na poczatek. Ale jak? :>
Prosze o pomoc i zrozumienie, brak mi juz wlasnego pomyslu na to.