Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Txt in Listview Laden (https://www.delphipraxis.net/173792-txt-listview-laden.html)

Natcree 16. Mär 2013 13:34

Txt in Listview Laden
 
Hallo ich habe ein Listview die über eine Objectlist bearbeitet werden kann nun Speichere ich beim beenden die Listview in eine *.txtab. Alles kein Problem soweit.

Beim laden der txt datei fügt er sie in die Listview = kassenbuch ein das funktionier. aber sobald ich neue Sachen der Listview mit hinzufüge dann verschwinden diese. Muss ich die txt in die Objectliste einlesen??? hier mal der Code.

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
Var
  LoadList: TStrings;
  i, ActPos, PrevPos: Integer;
Const
  Delimitter = #14;

Begin
   LoadList := TStringList.create;

  Try
    // Laden...
    LoadList.LoadFromFile('c:\test.txt');
    // Lösche den ListView
    Kassenbuch.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 Kassenbuch.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  
end;
   end;

DeddyH 16. Mär 2013 14:35

AW: Txt in Listview Laden
 
Du musst Dir erst einmal über die Funktionsweise im Klaren sein, sonst stellst Du noch 200 Fragen und bist hinterher immer noch nicht schlauer. Da ist zunächst einmal die Objektliste. Diese enthält die eigentlichen Daten. Datenänderungen (Hinzufügen, Bearbeiten, Löschen) haben also immer hier zu erfolgen. Die Listview dient lediglich dazu, diese Daten zu visualisieren, daraus folgt: ändert sich etwas an den Daten, muss die ListView aktualisiert werden. Prinzipiell würde das Programm auch als Konsolenanwendung funktionieren, dann hat man eben keine Komponenten, sondern gibt sein Zeugs auf der Kommandozeile ein. Und auch bei Verwendung der VCL ist die Darstellungskomponente austauschbar, das kann die ListView, ein StringGrid, ein Memo, eine ListBox oder was weiß ich sonst noch sein. Verinnerliche dies, und schau Dir Deinen Code daraufhin noch einmal an, dann beantworten sich viele Fragen ganz von selbst.

Popov 16. Mär 2013 14:38

AW: Txt in Listview Laden
 
Erstens:

Delphi-Quellcode:
Var
  LoadList: TStrings;
Das sollte so lange klappen, solange du keine typische TStringList Funktion nutzt. Mach also besser TStringList draus.

Natcree 16. Mär 2013 21:40

AW: Txt in Listview Laden
 
Will die Daten schon in die Objectliste laden das ist mir klar weil die listview ja nur die Visuelle wiedergabe darstellt. Wie müsste ich denn mit meinem Code Anfangen? Kann mann meinen Code Oben auf die Objectliste umschreiben wenn ja wie? Arbeite zum erstenmal mit Objectklassen. Also in die Listview Kriege ich sie ja aber wie Weiter???

Natcree 16. Mär 2013 23:08

AW: Txt in Listview Laden
 
Habe mal meinen Code umgeschrieben er sagt mir jetzt list out of Bounds(0) als Fehler

Hier der Code


Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
Var
  Item: TListItem;
  LoadList: TStringlist;
  i, ActPos, PrevPos: Integer;
Const
  Delimitter = #14;

Begin
   LoadList := TStringList.create;
Try
    // Laden...
    LoadList.LoadFromFile('c:\test.txt');
   // Lösche den ListView
    Kassenbuch.Items.Clear; //Kassenbuch =Listview1

    // 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
       item.Data:=FObjects[i];
      With FObjects[i] 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
           item.SubItems.Add(Copy(LoadList[i], PrevPos, (ActPos - PrevPos)))
          Else
           item.SubItems.Add(Copy(LoadList[i], PrevPos, Length(LoadList[i])));
          PrevPos := succ(ActPos);
        // Wenn ActPos = 0 (kein Delimitter gefunden) -> fertig
        Until ActPos = 0;
      end;
   end;
   except
   end;
   end;

Bummi 16. Mär 2013 23:15

AW: Txt in Listview Laden
 
Zitat:

// Erstelle Item
item.Data:=FObjects[i];
wo wird item erstellt und was ist FObjects[i]

Natcree 16. Mär 2013 23:19

AW: Txt in Listview Laden
 
FObjects ist meine Objectliste

Zitat:

wo wird item erstellt
Was meinst du damit?

Volker Z. 16. Mär 2013 23:30

AW: Txt in Listview Laden
 
Hallo,

item ist vermutlich ein Item der Listview. So müsste es dann wohl Kassenbuch.Item [i].Data := FObjects [i] heißen. Die Frage ist nur lebt den FObjects [i] an der Stelle schon? Ich sehe, dass Du da mit LoadFromFile irgendwas einließt, aber sicher nicht an Deine ObjectList weitergibst.

Gruß

Natcree 16. Mär 2013 23:39

AW: Txt in Listview Laden
 
wie mache ich das denn mit dem weiter geben

Natcree 16. Mär 2013 23:41

AW: Txt in Listview Laden
 
ich habe die daten schon in die listview gebracht aber sie müssen in die Objectliste weil ich die Listview nach jeder eingabe update. wie bekomme ich denn die Übergabe zur objectlist hin?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.
Seite 1 von 3  1 23      

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