Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Problem Tlistview in INI zu speichern...


Julian W. - Do 21.12.06 22:36
Titel: Problem Tlistview in INI zu speichern...
Ja, ich HABE die Suche benutzt, aber leider hat mir das alles nicht weitergeholfen. Ich verstehe ja selber nicht, wo mein Problem liegt. Also ich möchte den Inhalt meiner ListView in ne Ini speichern. Die Ini sieht so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
[Files]
; http://datei=description
http://google.de/bla.exe=MeineTestDatei


[Params]
;parameter=ausgabedatei.tm
/stabular C:\Windows\System32\upd.tm=upd.tm

[Names]
;dateiname=dateigröße
upd32=88064
bla=1
bls=2
ble=454


Also mein Programm läd die Dateien in der Ini der Reihe nach herunter. Das ist aber nebensächlich. Also mein Ausgabecode sieht wie folgt aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
begin
savedialog1.InitialDir := extractfilepath(paramstr(0));
if savedialog1.Execute = true then
  begin
    ini := tinifile.Create(savedialog1.FileName);
    for i := 0 to pred(Listview1.Items.Count) do
      begin
      //dateiname und dateigröße schreiben
        ini.WriteString('Names', Listview1.items[i].Caption,  Listview1.items.Item[i].SubItems[1 -1]);
      //Parameter und ausgabedatei schreiben
        ini.Writestring('Params',Listview1.items[i].SubItems[2 -1],Listview1.items.Item[i].SubItems[3 -1]);
      //URL und Komment schreiben
        ini.WriteString('Files',Listview1.items[i].SubItems[4 -1],Listview1.items.Item[i].SubItems[5 -1]);
      end;
  end;
end;


Wenn ich das so kompilliere, kommt nen Fehler, von wegen listenindex maximum überschritten (-2). Und in der Ini steht das:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[Names]
upd32=88064
bla=1
[Params]
http://google.de/bla.exe=MeineTestDatei
upd.tm=http://google.de/bla.exe
/stabular C:\Windows\System32\upd.tm=upd.tm
[Files]
http://google.de/bla.exe=MeineTestDatei


Würde mich über shcnelle Hilfe total freuen. Gruß Julian.


Narses - Do 21.12.06 23:11

Moin!

Ich weiß nicht so genau, was du da eigentlich mit dieser armen INI tust, aber so wird das sicher nix... :nixweiss:

Vielleicht beschreibst du mal den Aufbau des Listview-Inhalts, dann können wir evtl. einen alternativen Ansatz für den INI-Aufbau diskutieren bzw. Code-Vorschläge dazu machen. ;)

cu
Narses


Julian W. - Fr 22.12.06 17:24

Ja, sry. War gestern von der ganzen Sache ziemlich angepisst. Hier ma nen Screen:
user defined image

Freue mich auf eure Antworten. Und - Frohe Weihnachten schonmal


Lannes - Fr 22.12.06 17:56

Hallo,

die SubItems müssen existieren, wenn man auf sie zugreifen will.
Daher wird vermutlich die Meldung bzgl. Listenüberschreitung kommen.

Entweder man legt zumindest ein leeres SubItem mit SubItems.Add('') an und prüft auf diesen Leerstring beim Schreiben in die ini-Datei,
oder man nutzt Items[x].SubItems.Count zur Ermittelung der Anzahl der vorhandenen SubItems.


Julian W. - So 24.12.06 22:57

OK, vielen Dank. Habs jetz hinbekommen. Gruß Julian & Ein frohes Fest =)