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 Memofeld filtern (https://www.delphipraxis.net/112507-memofeld-filtern.html)

JackTheRippa 22. Apr 2008 16:32


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?

DeddyH 22. Apr 2008 16:46

Re: Memofeld filtern
 
Mal aus dem Kopf:
Delphi-Quellcode:
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;
P.S.: Willkommen in der DP

Die Muhkuh 22. Apr 2008 16:55

Re: Memofeld filtern
 
Hi,

müsste es nicht Count - 1 heißen, Detlef?

DeddyH 22. Apr 2008 16:57

Re: Memofeld filtern
 
Was macht denn Pred, Manuel?

Die Muhkuh 22. Apr 2008 16:59

Re: Memofeld filtern
 
Ach, sei still. :mrgreen:

Total übersehen :oops:

bluesbear 22. Apr 2008 19:30

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.

marabu 22. Apr 2008 19:53

Re: Memofeld filtern
 
Hallo,

vielleicht ist die triviale Präfix-Suche garnicht gewünscht.

Delphi-Quellcode:
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;
Grüße vom marabu

JackTheRippa 22. Apr 2008 20:16

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:

{StrUtils.}
noch was ergänzen, oder wie hab ich das zu verstehen?

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

Die Muhkuh 22. Apr 2008 20:18

Re: Memofeld filtern
 
Das ist nur ein Hinweis, dass Du die Unit StrUtils noch einbinden musst, damit Du diese Funktion nutzen kannst.

DeddyH 23. Apr 2008 07:08

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.
Seite 1 von 2  1 2      

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