Delphi Tips & Tricks softsale > Delphi Tips & Tricks      

następna rada >
< poprzednia rada

Jak inkrementalnie szukać w listbox ?


Szukamy w listbox elementów które zaczynają się od stringu wpisanego na edicie.

procedure TForm1.Edit1Change(Sender: TObject);
const
  indexStart = -1;
var
  szukaj : array[0..128] of Char;
begin
  StrPCopy(szukaj, Edit1.Text) ;
  ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, indexStart, LongInt(@szukaj)) ;
end;

Funkcja StrCopy kopiuje zawartość edita na zmienna stringową szukaj
z zerowym ogranicznikiem ( null-terminated string).
Metoda Perform wysyła komunikat LB_SELECTSTRING bezpośrednio do listboxa.
LB_SELECTSTRING  oczekuje dwóch parametrów:index_start 
oraz wskaźnika do zmiennej szukaj,która zawiera prefix po którym szukamy .
LB_SELECTSTRING przeszukuje listboxa na zawartość zaczynającą się od znaków
w podanym łancuchu.Jeżeli element taki zostanie znaleziony, zostaje on wybrany,
w przeciwnym wypadku pozycja w listbox pozostaje niezmieniona.

Ograniczenia: LENGTH(edit1.text)<=128 oraz własność Multiselect listboxa ustawiona na false.


Ilustruje to przykład tip42.zip


SOFTSALE - Oprogramowanie i Szkolenia
softsale@softsale.com.pl

03-565 Warszawa , ul. Borzymowska 43 lok. 301C
tel/fax:4084840,0607612428