Programowanie w języku Delphi » FAQ

Jak zrobić program na zasadzie helpa - wyszukuje żądaną pozycję

Oto jedna najważniejsza procedura:

procedure TMainForm.edtSearchKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  i, Found : Integer;
begin
  for I := 0 to lbSearchStrings.Items.Count -1 do  // analizuj wszystkie pozycje
  begin
    Found := Pos(edtSearch.Text, lbSearchStrings.Items[i]); // szukaj ciagu znakow
    if (Found > 0) and (lbSearchStrings.Items[i][1] = edtSearch.Text[1]) then
    begin
      lbSearchStrings.ItemIndex := i; // jezeli znaleziono to zaznacz
      Break; // i przerwij dzialanie petli
    end;
  end;
end;

2 komentarze

seb0 2009-12-19 00:35

Wprowadziłem kilka ulepszeń:
1. wprowadzając znaki do edtSearch.Text nie trzeba się martwić już o ich wielkość
2. gdy nie znajdzie pasującego elementu usuwa zaznaczenie
3. wyświetla znaleziony element zawsze na początku listy (bardzo przydatne dla dużych list)

procedure TBaza.edtSearchKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  i, Found : Integer;
  sSearch, sText : String;
begin
  sSearch := AnsiLowerCase(edtSearch.Text); {zmieniam na małe znaki szukany tekst }
  if (sSearch = '') then Exit; {wychodze bo gdy pusty edtSearch.Text to po co szukać }
  for I := 0 to lbSearchStrings.Items.Count -1 do
  begin
    sText := AnsiLowerCase(lbSearchStrings.Items[i]); {dla prawidłowego szukania POS() również trzeba zmienić wielkość znaków elementu z listy }
    Found := Pos(sSearch, sText);
    if (Found = 1) then { zapewnia zaznaczanie zawsze prawidłowego pola, które rozpoczyna się od szukanego tekstu }
    begin
      lbSearchStrings.ItemIndex := i;
      lbSearchStrings.TopIndex := i;  { ustaw znaleziony element jako pierwszy w liście, bardzo przydatne np przy wieloelementowej liście }
      Break;
    end
    else
      lbSearchStrings.ItemIndex := -1; { gdy nie znajduje żadnego pasującego to usuwam zaznaczenie w liście }
  end;
end;

dandi8 2003-10-29 18:49

A co to to "klikacając tu"?
jakoś nie widze linka :)