Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: Suchfunktion <> Listbox ?

  Alt 4. Sep 2005, 22:25
Hi Vader,

deine ListBox ist unsortiert - die von mir verwendete Methode Find() funktioniert nur mit sortierten Strings. Das Vorgehen bei unsortierten Strings demonstriert Button2:

Delphi-Quellcode:
procedure MarkFirstLine(lb: TListBox; const prefix: string);
var
  i: integer;
  s: TStrings;
begin
  s := lb.Items;
  lb.ItemIndex := -1;
  for i := 0 to s.Count - 1 do
    if (AnsiUppercase(Copy(s[i], 1, Length(prefix))) = AnsiUppercase(prefix)) then
    begin
      lb.ItemIndex := i;
      if lb.MultiSelect then
        lb.Selected[i] := true;
      Exit;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
  index: integer;
begin
  sl := TStringList.Create;
  sl.Sorted := ListBox1.Sorted;
  with ListBox1 do begin
    sl.Assign(Items);
    // funktioniert nur wenn sl.Sorted = true
    sl.Find(Edit1.Text, index);
    if (Edit1.Text <> '')
    and (index >= 0)
    and (index < sl.Count)
    and (AnsiUppercase(Copy(sl[index], 1, Length(Edit1.Text))) = AnsiUppercase(Edit1.Text))
      then ItemIndex := index
      else ItemIndex := -1;
  end;
  sl.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  MarkFirstLine(ListBox1, Edit1.Text);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat