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