othello napisał(a)
Tylko nie bardzo wiem jak zaprogramowac OnData i OnDataFind W helpie nie znalazlem przykladow. Mozesz mi troche przyblizyc jak ty to robiles...? W ListBox bedzie na pewno podobnie.
Dobra. Napisze w skrócie jak to zrobiłem w TListView.
Najpierw OnDataHint. To zdarzenie wywoływane jest przed zdarzeniem OnData i zawiera informacje o zakresie elementów jakie będą rysowane. Początek i koniec tego zakresu zapisuje do zmiennych globalnych g_start_index i g_end_index.
void __fastcall SomeObject::OnDataHint(System::TObject* Sender, int StartIndex, int EndIndex)
{
g_start_index=StartIndex;
g_end_index=EndIndex;
}
No i tyle z OnDataHint ;). Teraz OnData. Wywoływane jest tuż przed rysowaniem elementu. Tutaj ustawiasz wszystkie właściwości elementu o indeksie Item->Index. Oczywiście, przypisane danemu elementowi właściwości nie są trwałe - potrzebne są tylko na czas rysowania elementu w oknie. Dlatego też, o listę zawierającą elementy musi zadbać aplikacja.
void __fastcall SomeObject::OnData(System::TObject* Sender, TListItem* Item)
{
if(Item->Index<g_start_index||Item->Index>g_end_index)return;
/* tu ustawiasz właściwości elementu TListItem z zewnętrznej listy */
Item->Caption=........;
Item->ImageIndex=.......;
....
....
}
Co do OnDataFind to nie wiem ale nie powinno być problemu - cała sztuczka polega na tym, że w trybie wirtualnym operujesz na zewnętrznej liście. Więc takie operacje jak dodawanie, usuwanie, sortowanie i wyszukiwanie elementów wykonujesz bez udziału kontrolki.