Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview und Ini (https://www.delphipraxis.net/146216-listview-und-ini.html)

DarkItachi 15. Jan 2010 19:59


Listview und Ini
 
Hallöchen!

Ich habe ein Listview1 mit Report Style!

Jetzt mache ich einige einträge in der Laufzeit..
Wenn ich auf Speichern drücke dann speichert er mir die Einträge in einer Ini Datei!

Delphi-Quellcode:
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'Configs\Settings\mainsettings.ini');
  for i := 0 to Listview1.Items.Count - 1 do

    TheFiles:= TheFiles + ' ' + Listview1.Items[i].Caption;

ini.WriteString('Listview','Data', TheFiles);

 ini.Free;
In der Ini sieht dann das halt alles so aus:
TheFiles=Eintrag1 Eintrag2 Eintrag3[usw..]

Nun will ich aber über ini.readstring diese Daten wieder korrekt einlesen!
Wie mache ich das, dass für jedes Leerzeichen ein neuer Eintrag entsteht?
(Mir ist es allerdings egal, wie es in der Ini steht oder ob man das anders macht, ich will nur dass das Listview wieder so wie vorher ist!)

Hat jemand eine Idee?

fatalerror 15. Jan 2010 20:26

Re: Listview und Ini
 
1. Ini-Datei ist meines Erachtens hier ungeeignet.
2. Speichern im Programmordner ist in der Regel "böse" (Seit Windows 2000)

Eine mögliche Lösung findest du bei Swissdelphicenter

markus5766h 15. Jan 2010 21:30

Re: Listview und Ini
 
Hallo,
Du musst auf jeden Fall Deinen "Bezeichner", hier Data ändern, da sonst
bei jedem Schleifendurchlauf Dein Wert "The Files" wieder auf den Bezeichner
"Data" geschrieben wird. So kannst Du die Einträge nicht auseinender halten.

Delphi-Quellcode:
var
 The Files : String;
 Data : String;

....

ini := TIniFile.Create(Extract File .......

for i := 0 to ListView1.Items.Count -1 do
 begin
  The Files := ListView1.Items[i].Caption;
  Data := 'Data'+IntToStr(i);
  ini.WriteString('ListView', Data, The Files);
 end;
Ini.Free;
so erhältst Du eine Ini-datei, die ungefähr so aussieht :
[ListView]
Data0=TheFiles
Data1=....
Data2=....

jetzt kannst Du wiederum per Schleife auf die Einträge zugreifen.
Möglichweise ist es sinnvoll, die Anzahl der Einträge auch in der
Ini-datei zu speichern.
z.B.
[delphi]
...
ini.WriteInteger('ListView', 'Items', ListView1.Items.Count -1);
...
[delphi]

fatalerror 15. Jan 2010 22:07

Re: Listview und Ini
 
@markus5766h

Wie bereits in meinem vorherigen Posting gesagt, eignet sich eine Ini-Datei nicht bzw nur sehr beschränkt um den Inhalt eines Listviews zu speichern. Dein Vorschlag mag zwar hier vielleicht funktionieren, was machst Du aber wenn Subitems vorhanden sind?

@DarkItachi

Ein etwas anderer Vorschlag:

Savelistview Pseudocode(ungetestet)
Delphi-Quellcode:
procedure SaveListViewToFile(AListView: TListView; sFileName: string);
var st : TFileStream;
begin
  st := TFileStream.Create( sFileName, fmCreate );
  try
    st.WriteComponent(AListView);
  finally
    st.free;
  end;
end;
Openlistview Pseudocode(ungetestet)

Delphi-Quellcode:
procedure OpenListViewToFile(AListView: TListView; sFileName: string);
var st : TFileStream;
begin
  st := TFileStream.Create( sFileName, fmOpenRead );
  try
      st.ReadComponent(AListView);
  finally
      st.free;
  end;

end;
Achtung: gilt nur als Denkanstoss, benötigt noch einige Arbeiten!

markus5766h 16. Jan 2010 14:38

Re: Listview und Ini
 
@fatalerror
... war ja auch nur eine Möglichkeit von vielen.

Es ging mir primär nur darum, aufzuzeigen, wie man die Einträge
lesen - schreiben kann, da "DarkItachi" seine Daten immer
auf den Bezeichner "DATA" geschrieben hat.
Selbstverständlich gibt es andere / bessere Möglichkieten :
Stream speichern, XML-Datei ....

Wenn ich Ini-Dateien benutze, lasse ich von Anwender bestimmen,
wo die Datei gespeichert wird (App-Data-Verzeichnis/se, Programm-Verzeichnis ...)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 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