Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Fokus in Liste der Combobox (https://www.delphipraxis.net/190998-fokus-liste-der-combobox.html)

aschne1 28. Nov 2016 13:06

Fokus in Liste der Combobox
 
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

a.def 28. Nov 2016 14:41

AW: Fokus in Liste der Combobox
 
Vielleicht habe ich dein Problem nicht ganz verstanden. Aber guck dir mal Delphi-Referenz durchsuchenTComboBox.ItemIndex an

Aviator 28. Nov 2016 16:45

AW: Fokus in Liste der Combobox
 
Ich denke dein Problem liegt darin, dass die ComboBox schon eine integrierte Funktion hat um bei Eingabe eines Textes die erste Übereinstimmung anzuzeigen. Die Übereinstimmung wird aber nicht anhand einer beliebigen Stelle im Wort festgestellt, sondern diese wird festgestellt indem der Anfang der Items mit dem eingegebenen Text verglichen wird. Daher glaube ich, dass eine Filterung der Daten, welche ausschließlich über die Combobox abläuft, nicht das gewünschte Ergebnis erzielt.

aschne1 30. Nov 2016 09:03

AW: Fokus in Liste der Combobox
 
Mit ItemIndex habe ich es bereits versucht, komme aber nicht weiter. Der Ansatz von Aviator hört sich sehr nach meinem Problem an, doch wie löse ich dieses?

a.def 30. Nov 2016 09:25

AW: Fokus in Liste der Combobox
 
Zitat:

Mit ItemIndex habe ich es bereits versucht, komme aber nicht weiter.
Du musst doch einfach nur die ComboBox-Items in einer Schleife durchgehen und beim gewünschten Item stoppen
Delphi-Quellcode:
 for i := 0 to ComboBox1.Items.Count - 1 do
  if AnsiCompareText(ComboBox1.Items[i], 'Testpizza') = 0 then
   begin
    ComboBox1.ItemIndex := i;
    Break;
   end;
Oder eben so (Erster Treffer, wo Suchbegiff im Wort vorkommt)
Delphi-Quellcode:
 for i := 0 to ComboBox1.Items.Count - 1 do
  if Pos('Testpizza', ComboBox1.Items[i]) > 0 then
   begin
    ComboBox1.ItemIndex := i;
    Break;
   end;

aschne1 30. Nov 2016 12:29

AW: Fokus in Liste der Combobox
 
Wenn ich ItemIndex setze funktioniert meine Filfterfunktion nicht...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz