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
 
Popov
(Gast)

n/a Beiträge
 
#6

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
 


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 10:46 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-2025 by Thomas Breitkreuz