Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListBox Suche ergänzen? (https://www.delphipraxis.net/150467-listbox-suche-ergaenzen.html)

AlexII 17. Apr 2010 20:55


ListBox Suche ergänzen?
 
Hallo,

ich suche wie folgt eine ListBox durch. Bei mir wird allerdings nur ein Item selektiert und immer das letzte. Möchte es aber so habe, dass alle Item selektiert werden wo eine Suche erfolgreich war.

Delphi-Quellcode:
procedure TForm1.SearchEditChange(Sender: TObject);
var Stationscount, i, Kandidat: Integer;
begin
Stationscount:=ListBox1.Items.Count;

for i:=0 to Stationscount-1 do
   begin
     Kandidat:=Pos(SearchEdit.Text, AnsiLowerCase(ListBox1.Items[i]));
     if Kandidat <> 0 then
     begin
     ListBox1.ItemIndex:=i;
     end;
   end;
end;
Die ListBox bei diesem Code auf MultiSelect:=True setzen hilft nicht. Und anstatt ListBox1.ItemIndex:=i; -> ListBox1.ItemSelect:=i; nehmen kann man nicht, so nen Befehl gibt es nicht.

Wer kann mir das weiter helfen? Danke!

Matze 17. Apr 2010 21:40

Re: ListBox Suche ergänzen?
 
Hallo,

so geht's:

Delphi-Quellcode:
procedure TForm1.SearchEditChange(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to ListBox1.Count - 1 do
  begin
    ListBox1.Selected[i] := Pos(SearchEdit.Text, AnsiLowerCase(ListBox1.Items[i])) > 0;
  end;
end;
Grüße, Matze

DeddyH 18. Apr 2010 09:35

Re: ListBox Suche ergänzen?
 
Oder
Delphi-Quellcode:
procedure TForm1.SearchEditChange(Sender: TObject);
var
  i: Integer;
begin
  ListBox1.Items.BeginUpdate;
  try
    for i := 0 to ListBox1.Count - 1 do
      ListBox1.Selected[i] := AnsiContainsText(ListBox1.Items[i],SearchEdit.Text);
  finally
    ListBox1.Items.EndUpdate;
  end;
end;
Das sollte dann wirklich case-insensitiv sein ;)

AlexII 18. Apr 2010 11:36

Re: ListBox Suche ergänzen?
 
Was heißt "case-insensitiv"? :gruebel:

DeddyH 18. Apr 2010 11:39

Re: ListBox Suche ergänzen?
 
Ohne Berücksichtigung von Groß- und Kleinschreibung.

AlexII 18. Apr 2010 12:07

Re: ListBox Suche ergänzen?
 
Hab das jetzt so:

Delphi-Quellcode:
procedure TForm1.SearchEditChange(Sender: TObject);
var i, u: Integer;
begin

for u:=0 to ListBox1.Items.Count-1 do  //hier muss ich die Liste unselectiert machen
begin
ListBox1.Selected[u]:=False;
end;

for i:=0 to ListBox1.Items.Count-1 do
begin
  ListBox1.MultiSelect:=True;
  if Pos(SearchEdit.Text, AnsiLowerCase(ListBox1.Items[i])) <> 0 then ListBox1.Selected[i]:=True;
end;

SearchEdit.Hint:='';

end;

procedure TForm1.SearchEditMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
if ListBox1.SelCount>0 then
SearchEdit.Hint:=IntToStr(ListBox1.SelCount) + ' ' + _('hits') else SearchEdit.Hint:=_('Nothing found');
end;

DeddyH 18. Apr 2010 12:11

Re: ListBox Suche ergänzen?
 
Das ist doch viel zu umständlich.
Delphi-Quellcode:
procedure TForm1.SearchEditChange(Sender: TObject);
var
  i: Integer;
begin
  ListBox1.Multiselect := true;
  ListBox1.Items.BeginUpdate;
  try
    for i := 0 to ListBox1.Count - 1 do
      //Einträge werden dann selektiert, wenn der Suchstring enthalten ist, ansonsten deselektiert
      ListBox1.Selected[i] := AnsiContainsText(ListBox1.Items[i],SearchEdit.Text);
  finally
    ListBox1.Items.EndUpdate;
  end;
end;

AlexII 18. Apr 2010 12:12

Re: ListBox Suche ergänzen?
 
"AnsiContainsText" ist bei mir undefiniert. :roteyes:

Geht das wenn ich "AnsiLowerCase" nehme?

DeddyH 18. Apr 2010 12:14

Re: ListBox Suche ergänzen?
 
Dann musst Du aber auch beide Strings in Kleinschreibung wandeln. Oder eben StrUtils einbinden und doch AnsiContainsText verwenden.

AlexII 18. Apr 2010 12:19

Re: ListBox Suche ergänzen?
 
Thx... :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.
Seite 1 von 2  1 2      

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