AGB  ·  Datenschutz  ·  Impressum  







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

Suchen in TListView!

Ein Thema von TheMiller · begonnen am 3. Okt 2004 · letzter Beitrag vom 3. Okt 2004
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Suchen in TListView!

  Alt 3. Okt 2004, 17:36
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!
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Suchen in TListView!

  Alt 3. Okt 2004, 17:45
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 Delphi-Referenz durchsuchenpos und Delphi-Referenz durchsuchenAnsiLowerCase bzw. Delphi-Referenz durchsuchenAnsiUperCase überprüfen.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Suchen in TListView!

  Alt 3. Okt 2004, 17:49
Ok

das werde ich mal alles probieren. Wenn ich nicht zurecht komme, dann werde ich euch nochmal anstacheln, mir zu helfen

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Suchen in TListView!

  Alt 3. Okt 2004, 17:50
Hi DJ-SPM,

ungetesteter Code:
Delphi-Quellcode:
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;
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.

Greetz
alcaeus

PS: Code wurde nicht getestet oder compiliert.

[edit]da waren keine fehler im code[/edit]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: Suchen in TListView!

  Alt 3. Okt 2004, 17:53
Respekt

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!
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Suchen in TListView!

  Alt 3. Okt 2004, 18:12
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:
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;
und dies ist mein Aufruf:

SucheText(Finddialog1.FindText); Habe ich da was falsch gemacht?
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Suchen in TListView!

  Alt 3. Okt 2004, 19:11
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 von DJ-SPM:
Habe ich da was falsch gemacht?
Scheint so...
Denn woher willst du wissen, dass es ein selektiertes Item im 2. LV gibt?
Zitat von DJ-SPM:
Delphi-Quellcode:
      if bMatch then
      begin
       Form2.ListView1.ItemFocused.Caption:=SuchText;
Außerdem macht das so keinen Sinn. Du würdest doch bei 5 gefundenen Items immer wieder das _GLEICHE_ im 2. LV ändern.
  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 23:21 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