Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#11

Re: ListView Items in einer TextDatei speichern

  Alt 10. Mär 2004, 20:05
Wie beim TV-Koch:
Ich habe da mal was vorbereitet...

Happy

Speichern:

Delphi-Quellcode:
Var
  SaveList: TStrings;
  i, j: Integer;
  TempStr: String;
// Den kannst du auch global definieren, du kannst dafür nehmen was du willst
Const
  Delimitter = #14;

Begin
  If Not SaveDialog1.Execute Then Exit;
  SaveList := TStringList.create;
  Try
    // Dein ListView
    With ListView1 Do
    Begin
      // Laufe durch alle Items
      For i := 0 To pred(Items.Count) Do
      Begin
        TempStr := '';
        With Items[i] Do
          // Laufe durch alle SubItems
          For j := 0 To pred(SubItems.Count) Do
            TempStr := TempStr + Delimitter + SubItems[j];

        SaveList.Add(Items[i].Caption + TempStr);
      End;

    End;
    // Speichern
    SaveList.SaveToFile(SaveDialog1.FileName);
  Finally
    // Freigeben ...
    FreeAndNil(SaveList);
  End;
End;

Laden:

Delphi-Quellcode:
Var
  LoadList: TStrings;
  i, ActPos, PrevPos: Integer;
// siehe oben...
Const
  Delimitter = #14;

Begin
  If Not OpenDialog1.Execute Then Exit;
  LoadList := TStringList.create;

  Try
    // Laden...
    LoadList.LoadFromFile(OpenDialog1.FileName);
    // Lösche den ListView
    ListView1.Items.Clear;

    // Laufe durch Zeilen der StringList
    For i := 0 To pred(LoadList.Count) Do
    Begin
      PrevPos := 1;
      ActPos := 1;
      // Erste Position des Delimitters
      ActPos := PosEx(Delimitter, LoadList[i], succ(ActPos));
      // Erstelle Item
      With ListView1.Items.Add Do
      Begin
        // setze Caption des neuen Items
        Caption := Copy(LoadList[i], PrevPos, (ActPos - PrevPos));
        PrevPos := succ(ActPos);
        // erzeuge für jeden gefundenen Delimitter ein SubItem
        Repeat
          ActPos := PosEx(Delimitter, LoadList[i], succ(ActPos));
          If ActPos <> 0 Then
            SubItems.Add(Copy(LoadList[i], PrevPos, (ActPos - PrevPos)))
          Else
            SubItems.Add(Copy(LoadList[i], PrevPos, Length(LoadList[i])));
          PrevPos := succ(ActPos);
        // Wenn ActPos = 0 (kein Delimitter gefunden) -> fertig
        Until ActPos = 0;
      End;
    End;

  Finally
    // Freigeben...
    FreeAndNil(LoadList);
  End;
End;
  Mit Zitat antworten Zitat