AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Volltextsuche in Listview

Ein Thema von Larsi · begonnen am 30. Okt 2008 · letzter Beitrag vom 30. Okt 2008
Antwort Antwort
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#1

Volltextsuche in Listview

  Alt 30. Okt 2008, 12:25
Hi,
ich hatte vor einiger Zeit schonmal das Problem dass ich nicht wusste wie ich in einer Listview suchen kann (samt Subitems). Dank eurer Hilfe habe ich es dann doch aber hingekriegt. Jetzt habe ich wieder das Problem, dass ich in einer Listview suchen will aber nicht nach dem exaktem Text sondern so wie bei Itunes, dass wenn ich den Titel "Hallo" habe, dass dann schon das eingeben von beispielsweise "Ha" den Titel findet. Ich hoffe mein Vorhaben ist einigermaßen zu verstehen. Ich habe mal im Forum gesucht (ja ich kann das ) und habe einen Thread gefunden bei dem es um so ziemlich das gleiche ging doch die einzige Lösung die genannt wurde, war auf das "VirtualTreeview" umzusteigen, welches angeblich so eine Suchfunktion hat. Da ich das aber nur sehr ungern will möchte ich von euch wissen wie man das vielleicht auch mit der Standard Komponente machen kann.

MFG Lars Wiltfang
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Volltextsuche in Listview

  Alt 30. Okt 2008, 12:28
Wenn Du mit Pos arbeitest, sollte das funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#3

Re: Volltextsuche in Listview

  Alt 30. Okt 2008, 12:34
Also eine einfache Methode ist die Suche mit Delphi-Referenz durchsuchenPos:

Delphi-Quellcode:
// Überprüft, ob in "Item" irgendwo "aText" steht
function ItemHasText(Item: TListItem; const aText: string): boolean;
var i: integer;
begin
  result := True;
  if Pos(AnsiUpperCase(aText), AnsiUpperCase(Item.Caption)) > 0 then
     exit;

  for i:=0 to Item.SubItems.Count-1 do
    if Pos(AnsiUpperCase(aText), AnsiUpperCase(Item.SubItems[i])) > 0 then
      exit;

  result := False;
end;

// Durchsucht "aListView" nach "aText"
function FindItemText(aListView: TListView; const aText: string): TListItem;
var i: integer;
begin
  for i:=0 to aListView.Items.Count-1 do
  begin
    result := aListView.Items[i];
    if ItemHasText(result, aText) then
       exit;
  end;
  result := nil;
end;
Delphi-Quellcode:
// Aufruf:
procedure TForm1.Button1Click(Sender: TObject);
var FoundItem: TListItem;
begin
  FoundItem := FindItemText(ListView1, Edit1.Text);
  if not Assigned(FoundItem) then
     ShowMessage('Text nicht gefunden')
  else
     FoundItem.Selected := True;
end;
Ungetestet, einfach mal so eingegeben
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Volltextsuche in Listview

  Alt 30. Okt 2008, 12:34
- Leite eine neue Klasse von TListView ab
- in diese neue Klasse fügst du eine zusätzliche TList(TStringList) ein
- in diese zusätzliche Liste fügst du alle Texte ein, die möglich sind
- bei der Suche gehst du diese Liste durch und suchst mit Pos() nach einer Entsprechung
- alle dei dem pos entsprechen fügst du der Listview Liste zur Ansicht hinzu

fettisch
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Volltextsuche in Listview

  Alt 30. Okt 2008, 12:35
StrUtils und AnsiContainsText/AnsiContainsStr würde den Code noch kürzen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr.
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