Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Listbox mit einer Suchfunktion durchsuchen? (https://www.delphipraxis.net/126391-listbox-mit-einer-suchfunktion-durchsuchen.html)

DeddyH 23. Dez 2008 16:57

Re: Listbox mit einer Suchfunktion durchsuchen?
 
In Deinem Code seh ich nur, dass die Deklaration der lokalen Variablen i fehlt (außerdem waren bei AnsiContainsText die Parameter vertauscht). Ich habe jetzt mal eine allgemeingültige Prozedur dafür geschrieben.
Delphi-Quellcode:
uses StrUtils;

procedure FilterItems(const sl: TStrings; const substr: string);
var i: integer;
begin
  sl.BeginUpdate;
  try
    for i := Pred(sl.Count) downto 0 do
      if not StrUtils.AnsiContainsText(sl[i],substr) then
        sl.Delete(i);
  finally
    sl.EndUpdate;
  end;
end;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  FilterItems(ListBox1.Items,Edit1.Text);
end;
Bei mir funktioniert es wie gedacht.

Der.Kaktus 23. Dez 2008 17:01

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Zitat:

Zitat von DeddyH
@Klaus: das ist ja wohl eher ein konzeptionelles Problem. Der TE müsste sowieso eine Stringliste aller Items im Hintergrund halten oder beim Rücksetzen der Filterbedingungen die Items neu einlesen, so what?

@Kaki: Das sind doch nur mögliche Lösungsansätze, der TE muss das immer noch verfeinern IMO :zwinker:

Falsches Quote Deddy ..wirste Alt? ;-)*fg*

playa2k 23. Dez 2008 18:13

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Zitat:

Zitat von DeddyH
In Deinem Code seh ich nur, dass die Deklaration der lokalen Variablen i fehlt (außerdem waren bei AnsiContainsText die Parameter vertauscht). Ich habe jetzt mal eine allgemeingültige Prozedur dafür geschrieben.
Delphi-Quellcode:
uses StrUtils;

procedure FilterItems(const sl: TStrings; const substr: string);
var i: integer;
begin
  sl.BeginUpdate;
  try
    for i := Pred(sl.Count) downto 0 do
      if not StrUtils.AnsiContainsText(sl[i],substr) then
        sl.Delete(i);
  finally
    sl.EndUpdate;
  end;
end;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  FilterItems(ListBox1.Items,Edit1.Text);
end;
Bei mir funktioniert es wie gedacht.

Danke für deine Mühen.

Ich habe einiges umgeändert, damit es auch bei mir läuft.(TForm2<-----)
Das Programm will "procedure FilterItems(const sl: TStrings; const substr: string);" nich bei den Deklerationen haben?
->Unsatisfied Forward or external decleration.
Hab den Teil dann mal als Versuch "aus-geslasht" (//).
Das Programm läuft dann zwar, aber wenn ich auf Suchen klicke wird Listbox einfach geleert, egal was ich in Edit1 schreibe.

play

DeddyH 23. Dez 2008 18:15

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Die Prozedur gehört so wie sie da steht einfach in den Implementation-Teil Deiner Unit. Mehr ist nicht zu tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
Seite 2 von 2     12   

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