Hallo
Irgendwie steh ich auf dem Schlauch und komme einfach nicht weiter. Vielleicht kann mir jemand helfen?
Ich möchte eine Combobox mit vielen Einträgen filtern und verwende dazu die untenstehende Prozedur welche bei Onchange aufgerufen wird. Das funktioniert eigentlich ganz gut, wenn alle Einträge mit dem Suchbegriff beginnen. Hat es aber Einträge in der Combobox welche anders beginnen, dann wird nicht das erste angezeigte Element fokusiert, sondern das welches mit dem Suchbegriff beginnt.
Beispiel
Suchbegriff 'Reis'
Combobox enthält dann Basmatireis, Reismix, Trockenreis, Wildreis
wenn nun die Liste den Fokus erhält ist nicht Basmatireis sondern Reismix markiert!
Wenn ich mit AnsiStartsText(Combo.Text, Origin[I]) filtere funktioniert es, da nur noch Elemente in der Combobox sind die mit dem Suchbegriff beginnen.
Wie bekomme ich es hin, dass das erste Item in der Liste markiert ist. Kann mir jemand weiterhelfen?
Delphi-Quellcode:
procedure FilterComboBox(Combo: TComboBox; DefaultItems: TStrings);
function Origin: TStrings;
begin
if Combo.Tag = 0 then
begin
Result := TStringList.Create;
Result.Assign(Combo.Items);
Combo.Tag := Integer(Result);
end
else
Result := TStrings(Combo.Tag);
end;
var
Filter: TStrings;
I: Integer;
iSelIni: Integer;
begin
Combo.Items.BeginUpdate;
if(Combo.Text <> EmptyStr) then
begin
iSelIni:= Length(Combo.Text);
Filter := TStringList.Create;
try
for I := 0 to Origin.Count - 1 do
if AnsiContainsText(Origin[I], Combo.Text) then
Filter.AddObject(Origin[I], TObject(Origin.Objects[I]));
Combo.Items.Assign(Filter);
Combo.SelStart := iSelIni;
Combo.SelLength := Length(Combo.Text);
finally
Filter.Free;
end;
end
else
Combo.Items.Assign(DefaultItems);
Combo.Items.EndUpdate;
end;
Danke + Gruss
Armin