AGB  ·  Datenschutz  ·  Impressum  







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

Suche im ListView

Ein Thema von EvoX · begonnen am 22. Okt 2012 · letzter Beitrag vom 22. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
EvoX

Registriert seit: 22. Okt 2012
3 Beiträge
 
#1

Suche im ListView

  Alt 22. Okt 2012, 06:58
Hey Leute,
ich habe ein Programm geschrieben wofür ich eine Suchenfunktion noch brauch. Ich benutze zur Auflistung eine ListView Element. Könnt mir bei der Umsetzung helfen, wäre nett.

MFG EvoX
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Suche im ListView

  Alt 22. Okt 2012, 07:06
Guck dir mal das Tutorial auf dieser Seite an: http://users.iafrica.com/d/da/dart/z.../TreeView.html
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Suche im ListView

  Alt 22. Okt 2012, 07:29
ListView <> TreeView. Ich nehme mal an, ViewStyle ist auf vsReport gestellt, richtig? In dem Fall könnte man einfach über die Items iterieren und vergleichen (für die erste Spalte), für Folgespalten dann über die SubItems, wobei die zweite Spalte SubItems[0] entspricht.
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Suche im ListView

  Alt 22. Okt 2012, 07:33
Aber im Allgemeinen sollte man Anzeigekomponenten nicht als Datenspeicher missbrauchen.
Markus Kinzler
  Mit Zitat antworten Zitat
EvoX

Registriert seit: 22. Okt 2012
3 Beiträge
 
#5

AW: Suche im ListView

  Alt 22. Okt 2012, 07:34
ja genau so habe ich das gemacht. ah okay wusste ich nciht das man das so machen werde ich mal ausprobieren
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.341 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Suche im ListView

  Alt 22. Okt 2012, 07:35
Das einfachste wäre eine TVirtualStringTree zu benutzen. Dann kannst du unpassende Einträge schlicht unsichtbar machen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Suche im ListView

  Alt 22. Okt 2012, 08:01
Aber im Allgemeinen sollte man Anzeigekomponenten nicht als Datenspeicher missbrauchen.
Vollkommen richtig, aber ich wollte es jetzt nicht zu "kompliziert" machen. Um das trotzdem etwas auszuführen: man könnte sich einen Record oder eine Klasse deklarieren samt einer entsprechenden Liste. Den jeweiligen Listeneintrag legt man dann in der Data-Eigenschaft des ListItems ab. Somit ist man in der Lage, die Logik (also die Liste) von der Darstellung (der ListView) zu trennen. Außerdem kann man damit die Darstellung einer ListView beschleunigen, indem man sie in den virtuellen Modus setzt und einen Handler für das OnData-Ereignis schreibt.
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
Popov
(Gast)

n/a Beiträge
 
#8

AW: Suche im ListView

  Alt 22. Okt 2012, 08:26
Evtl. gibt es bessere Methoden, aber hier etwas auf die Schnelle mit Suche in Objekten. Die Infos liegen in Objekten die an Data hängen, Caption & Co dienen nur der Anzeige.

Delphi-Quellcode:
type
  TInfo = class
    Name: String;
    Ort: String;
  end;

  {Gibt den X-ten Teilstring eines mit Kommas getrennten Daten-Strings}
function ExtractSubStr(Str: String; Index: Integer): String;
var
  i: Integer;
begin
  Result := '';
  if Index < 1 then Exit;
  Str := Str + ',';
  for i := 1 to Index - 1 do Delete(Str, 1, Pos(',', Str));
  Result := Trim(Copy(Str, 1, Pos(',', Str) - 1));
end;

procedure TForm1.FormCreate(Sender: TObject);

  procedure SetInfo(s: String; var Info: TInfo);
  begin
    Info := TInfo.Create;
    Info.Name := ExtractSubStr(s, 1);
    Info.Ort := ExtractSubStr(s, 2);
  end;

var
  Info: TInfo;
  MyColumn: TListColumn;
  MyItem: TListItem;
  i: Integer;
begin
  with ListView1 do
  begin
    ViewStyle := vsReport;

    MyColumn := Columns.Add;
    MyColumn.Caption := 'Name';
    MyColumn := Columns.Add;
    MyColumn.Caption := 'Ort';

    //Zuerst für Beispiel mit Daten füllen, hier jedoch nur Daten-Objekt in Data
    SetInfo('Anna, Köln', Info);
    MyItem := Items.Add;
    MyItem.Data := Info;

    SetInfo('Kristina, München', Info);
    MyItem := Items.Add;
    MyItem.Data := Info;

    SetInfo('Sonja, Berlin', Info);
    MyItem := Items.Add;
    MyItem.Data := Info;

    SetInfo('Petra, Frankfurt', Info);
    MyItem := Items.Add;
    MyItem.Data := Info;

    SetInfo('Berbel, Lübeck', Info);
    MyItem := Items.Add;
    MyItem.Data := Info;

    //Daten aus Info in Caption und SubItems übertragen
    for i := 0 to ListView1.Items.Count - 1 do
    begin
      Info := TInfo(Items[i].Data);
      Items[i].Caption := Info.Name;
      Items[i].SubItems.Add(Info.Ort);
    end;
  end;
end;

//suchen im Daten-Objekt
procedure TForm1.Button1Click(Sender: TObject);
var
  Info: TInfo;
  s: String;
  i: Integer;
begin
  s := InputBox('Eingabe', 'Namen eingeben', '');

  with ListView1 do
  begin
    for i := 0 to ListView1.Items.Count - 1 do
    begin
      Info := TInfo(Items[i].Data);
      if SameText(Info.Name, s) then
        ShowMessage('Namen gefunden im Item: ' + IntToStr(i));
    end;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  with ListView1 do
    for i := 0 to Items.Count - 1 do
      TInfo(Items[i].Data).Free;
end;
Und nein, ich hab mir jetzt nicht die große Mühe gemacht. Den Code habe ich in Form (mit leichten Anpassungen) in der letzten Woche schon zwei mal gepostet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Suche im ListView

  Alt 22. Okt 2012, 08:39
Den Code habe ich in Form (mit leichten Anpassungen) in der letzten Woche schon zwei mal gepostet.
Davon wird er aber auch nicht besser
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
Popov
(Gast)

n/a Beiträge
 
#10

AW: Suche im ListView

  Alt 22. Okt 2012, 08:42
Ne, mach es besser, dann nutze ich deinen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:43 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