Drobne zacięcie z szukaniem w ListBox

0

Witam, mam taki kod:

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
  tofind: string; //szukany tekst
begin
  tofind := edit2.text;
  for i:=ListBox3.ItemIndex + 1 to ListBox3.Items.Count - 1 do
  begin
    if Pos(tofind, ListBox3.Items[i]) > 0 then
    begin
      ListBox3.ItemIndex := i;
       ListBox3.ItemIndex:=i;
Label3.Caption := listbox3.Items[i];
label7.Caption := listbox11.items[i];
label9.Caption := listbox2.Items[i];
      break;
    end;
  end;
end; 

i wszystko fajnie działa, szuka mi po kolei haseł w listbox3 tylko jak np znajdzie jedno hasło, drugie,trzecie i więcej już nie ma, to chciałbym żeby leciało od początku. nie mam pomysłu jak to zrobić, pomoże ktoś ?

0

Nie wiem jak pozostali koledzy, ale ja nie rozumiem co chcesz zrobić ...

0

wpisuje tekst do edit2 i szukam go w listbox3. powiedzmy że taki wyniki powtarza sie 3 razy.
np szukam słowa "janek"

linie w listbox3:

Ania
janek 
Olek
janek 
janek 
Marysia

wiec klikając 3 razy przycisk znajduje po kolei 3 słowa janek i teraz chce żeby jak klikne czwarty raz to od nowa pokazywało janka na samej górze, klikne jeszcze raz i żeby pokazało tego za olkiem, jeszcze raz i tego przed marysią, jeszcze raz i znowu tego po Ani. Rozumie ktoś tą moją plątanine ?

dodanie znacznika <code> - furious programming

0

Najprostszy sposób:
dodaj przed ostatnim end;

  if i = ListBox3.Items.Count - 1 then ListBox3.ItemIndex := -1;     
0

działa, dzięki :) o to chodziło :)

0

Albo w ten sposób:

function FindValueInList(AList: TStrings; ABeginIdx, AEndIdx: Integer; AValue: AnsiString): Integer;
var
  intToken: Integer;
begin
  for intToken := ABeginIdx to AEndIdx do
    if Pos(AValue, AList[intToken]) > 0 then
    begin
      Result := intToken;
      Exit;
    end;

  for intToken := 0 to ABeginIdx - 1 do
    if Pos(AValue, AList[intToken]) > 0 then
    begin
      Result := intToken;
      Exit;
    end;

  Result := -1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  intFound: Integer;
begin
  if ListBox1.ItemIndex = -1 then
    intFound := FindValueInList(ListBox1.Items, 0, ListBox1.Items.Count - 1, Edit1.Text)
  else
    intFound := FindValueInList(ListBox1.Items, ListBox1.ItemIndex + 1, ListBox1.Items.Count - 1, Edit1.Text);

  if intFound = -1 then
    Application.MessageBox('value not found', 'finding', MB_ICONSTOP)
  else
    ListBox1.ItemIndex := intFound;
end;

Przykładowy program w załączniku; Tylko zabezpiecz sobie kod, aby nie można było przeszukiwać pustej listy i wyszukiwać pustego ciągu.

0
procedure TForm1.Button2Click(Sender: TObject);
var i,pos,start,cnt:integer;
var tofind:string;
begin
  tofind:=edit2.text;
  start:=ListBox3.ItemIndex;
  cnt:=ListBox3.Items.Count;
  i:=1;
  while (i<cnt)and(Pos(tofind,ListBox3.Items[(i+start)mod(cnt)])<=0) do Inc(i);
  ListBox3.ItemIndex:=(i+start)mod(cnt);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1