Einzelnen Beitrag anzeigen

aschne1

Registriert seit: 18. Jul 2004
Ort: Davos
64 Beiträge
 
Delphi 2005 Professional
 
#1

Fokus in Liste der Combobox

  Alt 28. Nov 2016, 14:06
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
Armin
aschne1
  Mit Zitat antworten Zitat