Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Listbox suche (Live) Buchstabenfolge (https://www.delphipraxis.net/142678-listbox-suche-live-buchstabenfolge.html)

DeddyH 1. Nov 2009 16:36

Re: Listbox suche (Live) Buchstabenfolge
 
Die nicht gelöschten stehen ja noch drin :mrgreen:. Ich denke, Du meinst die bereits gelöschten. Wie ich im zitierten Thread bereits angedeutet hatte, muss man sich die "Original-Items" dann halt in einer internen TStringlist auf Vorrat halten und kann dann ggf. resetten.

Matze 1. Nov 2009 16:37

Re: Listbox suche (Live) Buchstabenfolge
 
Du kannst auch die StringList in die ListBox kopieren und bei der Eingabe leerst du die ListBox, läuft die StringList durch und fügst die passenden Einträge hinzu. Dann ist egal, ob du Buchstaben löscht oder hinzufügst.
Umgekehrt geht's natürlich auch: Die ListBox vorm Filtern komplett füllen und dann entsprechend die Einträge löschen.

In welcher Größenordnung befinden wir uns denn, was die Anzahl der Einträge betrifft (wegen der Performance)?

Detrox 1. Nov 2009 16:39

Re: Listbox suche (Live) Buchstabenfolge
 
ah ich verstehe, versuch ich mal umzusetzen...


Naja es können schon an die 400 Werden denke ich

DeddyH 1. Nov 2009 16:41

Re: Listbox suche (Live) Buchstabenfolge
 
Das ist ja nicht sooo viel. Wenn Du BeginUpdate und EndUpdate einsetzt, sollte das in adäquater Zeit zu machen sein.

Detrox 1. Nov 2009 16:51

Re: Listbox suche (Live) Buchstabenfolge
 
SO klappt ganz gut, nur irgendwie hat es einen kleinen haken, es ist schwierig zu erklären, also wenn ich jetzt etwas lösche dan wird auch geupdatet, nur nicht ganz richtig mal ein Beispiel:

Einträge:

Wolf
Motte
Wohnung
Molle

Ich schreibe:

Mo

.... passiert nix erst wenn ich jetzt noch einmal irgednetwas eingebe dann wird gefiltert.

Delphi-Quellcode:
procedure FilterItems(const sl: TStrings; const substr: string);
var i: integer;
begin
  sl.BeginUpdate;
  Merkliste:=Form1.MailerListbox.Items.Text;
  Form1.Mailerlistbox.Items.Text:=Merkliste;
  try
    for i := Pred(sl.Count) downto 0 do
      if not StrUtils.AnsiContainsText(sl[i],substr) then
        sl.Delete(i);

  finally
    sl.EndUpdate;
  end;
Delphi-Quellcode:
procedure TForm1.SucheditKeyPress(Sender: TObject; var Key: Char);
begin
if Suchedit.text='' then
else
Mailerlistbox.Items.Text:=Merkliste;
FilterItems(Mailerlistbox.Items,Suchedit.Text);
end;

Matze 1. Nov 2009 16:53

Re: Listbox suche (Live) Buchstabenfolge
 
Ohne den Rest des Codes durchgeschaut zu haben: Was ist denn der Sinn dahinter?

Delphi-Quellcode:
Merkliste:=Form1.MailerListbox.Items.Text;
Form1.Mailerlistbox.Items.Text:=Merkliste;

Detrox 1. Nov 2009 16:56

Re: Listbox suche (Live) Buchstabenfolge
 
Der sinn dahinter ist, das die aktuellen Listboxeinträge abzüglich der gelöschten den neuen Wert ergeben.

DeddyH 1. Nov 2009 16:58

Re: Listbox suche (Live) Buchstabenfolge
 
Der steht doch anschließend sowieso in der Listbox.

[edit] Noch einmal zum generellen Vorgehen: Du befüllst Deine Listbox, erstellst Dir eine Stringliste und weist dieser die Items der Listbox zu. Wenn nun gefiltert werden soll, leerst Du die Listbox und fügst die passenden Einträge aus der Stringliste ein. Da Du Dir das Original ja gemerkt hast, kannst Du das beliebig oft wiederholen, ohne dass Dir ursprüngliche Einträge verloren gehen. [/edit]

Detrox 1. Nov 2009 17:05

Re: Listbox suche (Live) Buchstabenfolge
 
Wie bin ich denn drauf :wall:

du hast recht mit

Delphi-Quellcode:
if Suchedit.text='' then
Mailerlistbox.items.text:=Mailerliste
ist es schon getan wenn ich zu beginn den Listboxinhalt speichere.

Nur ne kleine Macke hats noch lösche ich alles bis nichts mehr im Edit steht, dann muss ich noch 1 mal auf löschen klicken bis die Liste wieder drinn ist.

(vielleicht muss ich auf die Löschtaste separat reagieren) :roll:

DeddyH 1. Nov 2009 17:08

Re: Listbox suche (Live) Buchstabenfolge
 
Dann schreib das doch in ein Event des Edits (OnKeyPress oder OnChange).


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 Uhr.
Seite 2 von 3     12 3      

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