Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

playa2k 23. Dez 2008 13:48


Listbox mit einer Suchfunktion durchsuchen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-PRAXIS Community,

bin ein sehr begeisterter Programmierer, jedoch noch im Anfangs-Stadium und bräuchte eure Hilfe.
Besuche die Stufe 12 eines Gymnasiums und wir haben erst seit einigen Monaten begonnen, so richtig mit Delphi zu arbeiten.
Deshalb habe ich auch nur bedingte Grundkenntnisse und überfordert mich bitte nicht :D.

Ich habe begonnen, ein Visitenkarten-durchsuch-Programm zu schreiben (2-3 Minuten :D) und wollte gerne eine Suchfunktion einbauen,
um die Suche für meinen Vater etwas zu erleichtern.

Sobald etwas in das Edit-Feld eingegeben wird, soll Listbox durchsucht werden und die in Frage kommenden Namen übrig bleiben.

Um ein kleines Bild vom Programm zu machen, habe ich das Programm in den Anhang getan.

Ich hoffe Ihr könnt mir helfen.

Frohe Weihnachten und einen guten Rutsch !

play

Der.Kaktus 23. Dez 2008 14:13

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Hallo und erstmal herzlich willkommen in der :dp:,

Da Du, wie Du schreibst, fuer Deinen Vater Visitenkarten
verwalten moechtest, schau doch mal in der Suchfunktion der DP hier nach so etwas..Stichwort "Adressverwaltung"..da findest Du auch sicher paar Codeschnippsel die Dir helfen ;-)

Dir auch schoenes Fest :-D

Noedel 23. Dez 2008 14:20

Re: Listbox mit einer Suchfunktion durchsuchen?
 
ich hab das mal in nem programm von mir für ein Record gemacht.
QC siehe hier V hoffe es hilft ein wenig

Delphi-Quellcode:
procedure TForm1.EsucheChange(Sender: TObject);
var
  suche:string;
  buchstabe,wort,buchstabeimwort,biw,b:integer;
  weitersuchen:boolean;
begin
  esuche.Color:=clwhite;
  suche:=esuche.Text;
  gefundene:='';
  lgefundene.Caption:='';
  if length(suche) >=2 then
    begin
      weitersuchen:=false;
      wort:=1;
      REPEAT
        buchstabe:=1;
        buchstabeimwort:=1;
        weitersuchen:=false;
          REPEAT
           IF upcase(suche[buchstabe])=upcase(rec[wort].programm[buchstabeimwort]) THEN
             begin
               biw:=buchstabeimwort;
               b:=buchstabe;
               REPEAT
                 weitersuchen:=false;
                 inc(b);
                 inc(biw);
                 IF upcase(suche[b])=upcase(rec[wort].programm[biw]) THEN
                   weitersuchen:=true else weitersuchen:=false;
               UNTIL (weitersuchen=false)or(length(suche)=b);
               IF weitersuchen=true THEN
                 begin
                   lbausgabe.Selected[wort-1]:=true;
                   if gefundene='' then showmessage('Kein Fund');
                   gefundene:=gefundene+rec[wort].programm+#13;
                   lgefundene.Caption:=gefundene;
                 end;
             end;
           inc(buchstabeimwort);
          UNTIL (weitersuchen=true)or(buchstabe=length(suche))or(buchstabeimwort=length(rec[wort].programm));
        inc(wort);
      UNTIL Wort-1 = anzahl;
  end;
  if (gefundene='')and(length(suche)>1) then
    begin
      esuche.Color:=clred;
      beep;
    end;
end;

DeddyH 23. Dez 2008 14:20

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Der zu suchende String soll aber in der Listbox stehen, oder? Dann wäre es IMHO das Einfachste, die Listbox.Items in einer Schleife (rückwärts!) zu durchlaufen und die Items zu löschen, die den Suchstring nicht enthalten.
Delphi-Quellcode:
for i := Pred(ListBox.Items.Count) downto 0 do
  //möglicherweise habe ich jetzt die Parameter vertauscht, einfach mal in der Hilfe nachsehen
  if not StrUtils.AnsiContainsText(Suchstring,ListBox.Items[i]) then
    ListBox.Items.Delete(i);

Klaus01 23. Dez 2008 14:28

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Zitat:

Zitat von DeddyH
Der zu suchende String soll aber in der Listbox stehen, oder? Dann wäre es IMHO das Einfachste, die Listbox.Items in einer Schleife (rückwärts!) zu durchlaufen und die Items zu löschen, die den Suchstring nicht enthalten.
Delphi-Quellcode:
for i := Pred(ListBox.Items.Count) downto 0 do
  //möglicherweise habe ich jetzt die Parameter vertauscht, einfach mal in der Hilfe nachsehen
  if not StrUtils.AnsiContainsText(Suchstring,ListBox.Items[i]) then
    ListBox.Items.Delete(i);

Ist aber blöd, wenn ich mich z.B. vertippt habe und ein bereits eingegebenes Zeichen
wieder lösche - dann kann es vorkommen, dass der String bei den vorherigen Schritten
aus der Liste geflogen ist.

Was vielleicht noch interessant ist - autovervollständigen
Musst Du dir nur noch entsprechend umbauen von StringList nach ListBox.items.

Grüße
Klaus

Der.Kaktus 23. Dez 2008 14:55

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Nichts gegen Eure Loesungen..aber...sollten wir net "helfen zu lernen"..mir schien es bei "ihm" sehr nuetzlich..da er Initiative zeigte!!! :shock:

DeddyH 23. Dez 2008 15:32

Re: Listbox mit einer Suchfunktion durchsuchen?
 
@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:

Der.Kaktus 23. Dez 2008 15:55

Re: Listbox mit einer Suchfunktion durchsuchen?
 
[Edit] ....geloescht.....[/edit]
[OT] Schoenes Weihnachtsfest und guten Rutsch wuensch..Dir und Deinem Schatz [/OT] ;-)

DeddyH 23. Dez 2008 16:06

Re: Listbox mit einer Suchfunktion durchsuchen?
 
[OT] Dir und allen anderen Usern wünschen wir dasselbe [/OT]

playa2k 23. Dez 2008 16:42

Re: Listbox mit einer Suchfunktion durchsuchen?
 
Danke erst einmal für die Lösungsvorschläge.

Bin der Idee von DeddyH gefolgt, weil mir diese als einfachste erschien.
Jetzt weiß ich auch so ungefähr, was "AnsiContainsText" macht.
"Returns true if a string contains a substring, case insensitive"
True wird "gegeben", sobald String Zeichen vom Substring enthält.
Soweit ok.

if not StrUtils.AnsiContainsText(Suchstring,ListBox.Items[i])
^ ^
Also : 2.dem gesucht|1.In hier wird nach -
|-------------------------------|

Ich habe soweit folgendes stehen und bekomme folgende Fehlermeldungen, mit denen ich nichts anfangen kann, finde die Fehler nicht *schäm*

procedure TForm2.Button1Click(Sender: TObject);
begin
for i := Pred(ListBox1.Items.Count) downto 0 do
if not StrUtils.AnsiContainsText(Wort,ListBox1.Items[i]) then
ListBox.Items.Delete(i);
end;


[Error] Unit2.pas(42): Incompatible types: 'String' and 'Integer'
[Error] Unit2.pas(44): ')' expected but identifier 'Items' found
[Error] Unit2.pas(52): Statement expected but end of file found

Irgendwas stimmt mit ListBox1.Items[i] nicht, das weiß ich schonmal.
Ich habe versucht, die Fehler zu beseitigen, jedoch ohne Erfolg.
Ich möchte mich auch für das untere Niveau dieses Threads entschuldigen,es wäre wichtig für mich dieses Programm nach meinen Vorstellungen zu erstellen.

play
frohes Fest


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 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