![]() |
Suchen in TListView!
Hai!
Ich brächte ein wenig Hilfe, bei der Suchfunktion in einer ListView, die auf vsReport steht. Ich habe zuvor noch nie mit Suchfunktionen gearbeitet. Aber es ist immer irgendwann mal das "erste Mal" ;-) Also, ich hatte schon eine Funktion, aber die reagierte nur, wenn das Wort exakt in der Liste steht, wie in dem Suchfeld. Damit meine ich die Groß-und-Kleinschreibung. Außerdem fand er nichts, wenn ich nach dem Wort "AA" suchte und in einer Spalte "AA BB" drin stand. Bitte helft mir! :wall: |
Re: Suchen in TListView!
Hi,
es würde doch reichen, wenn du durch die ListView gehst und jeden Eintrag prüfst. Und ob etwas darin vorkommt, kannst du mit ![]() ![]() ![]() Chris |
Re: Suchen in TListView!
Ok
das werde ich mal alles probieren. Wenn ich nicht zurecht komme, dann werde ich euch nochmal anstacheln, mir zu helfen :) Danke! |
Re: Suchen in TListView!
Hi DJ-SPM,
ungetesteter Code:
Delphi-Quellcode:
Erklärung: Der Code durchsucht alle Items und deren SubItems, und wenn der Suchbegriff enthalten ist (nicht case sensitive), so wird das Item in ListView2 hinzugefügt.
procedure SucheText(SuchText: String);
var bMatch: Boolean; NewItem: TListItem; i, j: Integer; begin for i := 0 to ListView1.Items.Count-1 do begin with ListView1.Items[i] do begin bMatch := False; if Pos(LowerCase(Suchtext),LowerCase(Caption)) > 0 then bMatch := True; for j := 0 to SubItems.Count-1 do begin if Pos(LowerCase(Suchtext),LowerCase(SubItems[j])) > 0 then bMatch := True; end; if bMatch then begin NewItem := ListView2.Items.Add; NewItem.Caption := Caption; for j := 0 to SubItems.Count-1 do NewItem.SubItems.Add(SubItems[j]); end; end; end; end; Greetz alcaeus PS: Code wurde nicht getestet oder compiliert. [edit]da waren keine fehler im code[/edit] |
Re: Suchen in TListView!
Respekt :shock:
Danke vielmals. Werde aber erstmal versuchen, mit den von Chakotay genannten Begriffen zurecht zu kommen, bzw sie mir erstmal ansehen und dann deinen Code nachvollziehen... Finde ich Klasse. Danke! |
Re: Suchen in TListView!
Sorry, aber deine Funktion liefert eine Zugriffsverletzung zurück. Kann auch sein, dass es mein Fehler ist... Habe den Code so verändert:
Delphi-Quellcode:
und dies ist mein Aufruf:
procedure TForm2.SucheText(SuchText: String);
var bFound: Boolean; [b]bMatch: Boolean;[/b] NewItem: TListItem; [b]i,j:Integer;[/b] begin for i := 0 to [b]Form2.ListView1.Items.Count-1[/b] do begin with Form2.ListView1.Items[i] do begin bMatch := False; if Pos(LowerCase(Suchtext),LowerCase(Caption)) > 0 then bMatch := True; for j := 0 to SubItems.Count-1 do begin if Pos(LowerCase(Suchtext),LowerCase(SubItems[j])) > 0 then bMatch := True; end; if bMatch then begin Form2.ListView1.ItemFocused.Caption:=SuchText; end; end; end; end;
Delphi-Quellcode:
Habe ich da was falsch gemacht? :gruebel:
SucheText(Finddialog1.FindText);
|
Re: Suchen in TListView!
Ich hätte es etwas allgemeiner geschrieben. (Vielleicht willst du ja auch in einem anderen LV suchen ;) )
Als Ergenis gibt's ein array of TListItem :
Delphi-Quellcode:
type UglyHelperType = array of TListItem;
... function FindItems(aLV: TListView; const aSuchText: string; aCaseSensitive: boolean): UglyHelperType; var bMatch: Boolean; NewItem: TListItem; i, j, FoundItems: Integer; (* nested functions *) // getting an Item to the resultset procedure Add2Result(aLVI: TListItem); begin if FoundItems >= High(result) then setLength(result, FoundItems + 50); result[FoundKeys] := aLVI; inc(FoundLKeys); end; function Equals(const aString, aSearchWord): boolean; begin if aCaseSensitive then result := (Pos(LowerCase(aSearchWord), LowerCase(aString)) > 0) else result := (Pos(aSearchWord, aString) > 0); end; end; begin FoundKeys := 0; setLength(result, 50); for i := 0 to pred(aLV.Items.Count) do with aLV.Items[i] do begin bMatch := Equals(aSuchText, Caption); if not bMatch then for j := 0 to pred(SubItems.Count) do begin bMatch := Equals(aSuchText, SubItems[j]); if bMatch then Break(); end; if bMatch then Add2Result(aLV.Items[i]); end; if FoundKeys > 0 then setLength(result, FoundKeys); end; Zitat:
Denn woher willst du wissen, dass es ein selektiertes Item im 2. LV gibt? Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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 by Thomas Breitkreuz