![]() |
Memofeld filtern
hi zusammen!
Ich habe vor, aus Wörtern, die in einem Memofeld stehen, nur diejenigen herauszufiltern und anschließend in demselben Memofeld wieder anzuzeigen, die der Eingabe des Benutzers (in einem Edit-Feld) entsprechen. Klingt kompliziert, ist aber im Grunde dasselbe Prinzip, mit dem man in i_T_u_n_e_s die eigene Musiksammlung filtert. Weiß nicht genau, ob ich das Thema bei 'Datenbanken' hätte reinschreiben sollen. Bisher sieht mein Prog so aus, dass der Benutzer in ein Memofeld Wörter etc eingeben kann (wenn das funzt, will ich am Ende z.B. m3u-Playlists laden) und die Wörter dann sortiert werden. Jetzt soll die sortierte (!) Liste, die ich in ein 2. Memofeld umgeschrieben habe, mit der Eingabe des Benutzers in ein Edit-Feld verglichen werden. Also im Pseudo-Code-format: procedure TForm1.Edit1Change bei eingabe z.b. eines 'a' filtere mir alle Ergebnisse mit 'a' am anfang heraus Gibt es dafür eine Lösung? |
Re: Memofeld filtern
Mal aus dem Kopf:
Delphi-Quellcode:
P.S.: Willkommen in der DP
Memo.Lines.BeginUpdate;
for i := Pred(Memo.Lines.Count) downto 0 do if Pos(Edit.Text,Memo.Lines[i]) <> 1 then Memo.Lines.Delete(i); Memo.Lines.EndUpdate; |
Re: Memofeld filtern
Hi,
müsste es nicht Count - 1 heißen, Detlef? |
Re: Memofeld filtern
Was macht denn Pred, Manuel?
|
Re: Memofeld filtern
Ach, sei still. :mrgreen:
Total übersehen :oops: |
Re: Memofeld filtern
Hi JackTheRippa,
eine TComboBox mit Style=csSimple kann sowas wie eine inkrementelle Suche schon von sich aus. Ich persönlich finde das sogar besser als einen Filter, aber das ist Geschmackssache. Vielleicht ist das ja eine Idee für dich. |
Re: Memofeld filtern
Hallo,
vielleicht ist die triviale Präfix-Suche garnicht gewünscht.
Delphi-Quellcode:
Grüße vom marabu
procedure FilterStrings(sAll, sFilter: TStrings; const filter: string);
var i: Integer; begin sFilter.BeginUpdate; sFilter.Clear; try for i := 0 to Pred(sAll.Count) do if {StrUtils.}AnsiContainsText(sAll[i], filter) then sFilter.Append(sAll[i]); finally sFilter.EndUpdate; end; end; |
Re: Memofeld filtern
'nabend!
Also vielen Dank schon mal für die Hilfe. @DaddyH: Deine Version mit ...count-1 funzt. Danke! @Marabu: soll ich bei Zitat:
Delphi versteht nämlich den Befehl 'AnsiContainsText' nicht. Danke schon mal im Vorraus welche der beiden Prozeduren ermöglichen denn auch das Rückgängigmachen der Sortierung? Die erste Version sortiert zwar gut aus, aber wenn die das Edit-Feld lösche, kommt der urspr. Datensatz nicht wieder zum Vorschein. Gruß JTR |
Re: Memofeld filtern
Das ist nur ein Hinweis, dass Du die Unit StrUtils noch einbinden musst, damit Du diese Funktion nutzen kannst.
|
Re: Memofeld filtern
Eine Rückgängig-Funktion kann es nur geben, wenn Du Dir den alten Zustand merkst, z.B. in einer Stringliste.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr. |
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