Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listview Items in eine Ini-Datei schreiben (https://www.delphipraxis.net/19649-listview-items-eine-ini-datei-schreiben.html)

Die Muhkuh 6. Apr 2004 16:41


Listview Items in eine Ini-Datei schreiben
 
Hoi! :hi:


Ich hab eine Listview die sieht so aus:
Code:
Datei    Größe    Kommentar
Unter jedem dieser Columens gibt es Einträge. Diese möchte ich in eine Ini-Datei schreiben. Ich stelle mir das ungefähr so vor:

Code:
[Dateien]
Datei1=...
Datei2=...
[Groesse]
Groesse1=...
Groesse2=...
[Kommentar]
Kom1=...
Kom2=...
Also Groesse1 und Kommentar1 gehören zu Datei1, usw.


Wie kann man das verwirklcihen?

neolithos 6. Apr 2004 16:55

Re: Listview Items in eine Ini-Datei schreiben
 
Warum so kompliziert?

Code:
[ListView]
Datei1.dat=24;Hallo Welt K1
Datei2.dat=34;Hallo Welt K222
Datei3.dat=0;Hallo Welt 231

Die Muhkuh 6. Apr 2004 16:58

Re: Listview Items in eine Ini-Datei schreiben
 
Wie schon gesagt ich stellte mir das so ungefähr aus.

Wenn du mir jetzt noch verräts wies geht dann machst du jemanden sehr glücklitsch.

sCrAPt 6. Apr 2004 17:03

Re: Listview Items in eine Ini-Datei schreiben
 
Zitat:

Zitat von Spider
Wenn du mir jetzt noch verräts wies geht dann machst du jemanden sehr glücklitsch.

Mit zwei for schleifen und tinifile ;)

:angle:, sCrAPt

alanblack 6. Apr 2004 17:04

Re: Listview Items in eine Ini-Datei schreiben
 
Das allgemeine Speichern müsste so funktionieren.

Code:
Var
  SaveList: TStrings;
  i, j: Integer;
  TempStr: String;
Const
  Delimitter = #14;

Begin
  If Not SaveDialog1.Execute Then Exit;
  SaveList := TStringList.create;
  Try
    // ListView
    With ListView1 Do
    Begin
      // durch alle Items laufen
      For i := 0 To pred(Items.Count) Do
      Begin
        TempStr := '';
        With Items[i] Do
          // und 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;
hoffe das ich helfen konnte

mfg alanblack

neolithos 6. Apr 2004 17:07

Re: Listview Items in eine Ini-Datei schreiben
 
So könnte man schreiben
Delphi-Quellcode:
var sTmp : String;
    i, j : Integer;

for i := 0 to lst.Count - 1 do
    begin
      sTmp := '';
      for j := 0 to lst.Items[i].SubItems.Count - 1 do
          sTmp := sTmp + ';' + lst.Items[i].SubItems[j];
      ini.WriteString('ListView', lst.Items[i].Caption, sTmp);
    end;

neolithos 6. Apr 2004 17:11

Re: Listview Items in eine Ini-Datei schreiben
 
So könnte man lesen
Delphi-Quellcode:
var lst : TStringList;


ini.GetValueList('ListView', lst); // hole alle Values einer Section soll das heißen

for i := 0 to lst.Count - 1 do
    with lst.Items.Add do
      begin
        Caption := lst[i];
        sTmp := ini.ReadString('ListView', lst[i], '');
        while Length(sTmp) > 0 do
          begin
            iPos := Pos(';', sTmp);
            if iPos = 0 then
               iPos = Length(sTmp) + 1;
            SubItems.Add(Copy(sTmp, 1, iPos - 1);
            sTmp := Copy(sTmp, iPos + 1, MaxInt);
          end;
      end;

neolithos 6. Apr 2004 17:16

Re: Listview Items in eine Ini-Datei schreiben
 
Ach, einen kleinen Haken hat das ganze noch!

Wenn in deinem Kommentar ein ; Vorkommt läuft der Leseprozess gegen den Boum. Dies verhintere ich durch Quotierung ("") der einzelnen Daten!

Einfacher währe es eve. das ; durch ein Zeichen zu ersetzen, was nicht geschrieben werden kann. Macht aber die Möglichkeit zu nicht,e den Inhalt der INI per Hand zu ändern.

alanblack 6. Apr 2004 17:17

Re: Listview Items in eine Ini-Datei schreiben
 
oder so:

Code:
Var
  LoadList: TStrings;
  i, ActPos, PrevPos: Integer;
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;
Mfg alanblack

Robert_G 6. Apr 2004 17:38

Re: Listview Items in eine Ini-Datei schreiben
 
@Alan
:gruebel: ...
Woher kenne ich den Code bloß... :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Seite 1 von 2  1 2      

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