AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fokus in Liste der Combobox

Ein Thema von aschne1 · begonnen am 28. Nov 2016 · letzter Beitrag vom 30. Nov 2016
Antwort Antwort
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
a.def
(Gast)

n/a Beiträge
 
#2

AW: Fokus in Liste der Combobox

  Alt 28. Nov 2016, 15:41
Vielleicht habe ich dein Problem nicht ganz verstanden. Aber guck dir mal Delphi-Referenz durchsuchenTComboBox.ItemIndex an
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Fokus in Liste der Combobox

  Alt 28. Nov 2016, 17:45
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.
  Mit Zitat antworten Zitat
aschne1

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

AW: Fokus in Liste der Combobox

  Alt 30. Nov 2016, 10:03
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?
Armin
aschne1
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: Fokus in Liste der Combobox

  Alt 30. Nov 2016, 10:25
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;
  Mit Zitat antworten Zitat
aschne1

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

AW: Fokus in Liste der Combobox

  Alt 30. Nov 2016, 13:29
Wenn ich ItemIndex setze funktioniert meine Filfterfunktion nicht...
Armin
aschne1
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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