Entwickler-Ecke

Dateizugriff - INI - ReadSections() und ListView


cl9wn - Sa 13.09.08 15:40
Titel: INI - ReadSections() und ListView
Hi, ich habe festgestellt, dass man per ini.ReadSections(ListBox1.Items); (wobei ini natürlich mein TIniFile ist) alle Sections der INI in eine Listbox schreiben kann. Kann ich das auch mit einer ListView machen? Irgendwie funktioniert das nämlich nicht weil das eine TListItem und das andere TStrings ist ...

Also ini.ReadSection(ListView1.Items); geht nicht ...


freak4fun - Sa 13.09.08 15:49

Nein, dirkt geht das nicht. Was erwartest du denn als Ergebnis?


Yogu - Sa 13.09.08 16:06

Du könntest den Inhalt der Sektion in eine StringListe laden ...


Delphi-Quelltext
1:
2:
3:
4:
5:
var StringList: TStringList; i: Integer;
begin
  StringList := TStringList.Create;
  try
    Ini.ReadSection(StringList);

... und dann die StringList abklappern und Schritt für Schritt in das ListView laden.


Delphi-Quelltext
 
6:
7:
8:
9:
10:
11:
12:
13:
14:
{ ... }
    for i := 0 to StringList.Count-1 do
      with ListView1.Items.Add do
      begin
        Caption := StringList[i];
      end;
  finally
    StringList.Free;
  end;
end;

Da du ein ListView verwendest, hast du sicherlich noch andere Eigenschaften (Symbol, Spalten etc.). Die kannst du auch im with-Block setzen.


cl9wn - Sa 13.09.08 16:45

Vielen dank, ich denke das klappt, werde es mal ausprobieren.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

So, ausprobiert und Funktioniert. Aber schon das nächste Problem:

Meine ListView ist so aufgebaut: 2 Spalten, Links "Servername", rechts "ServerAdresse"

Hab jetzt folgenden Quellcode:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TfrmLauncher.FormCreate(Sender: TObject);
var
  i : Integer; 
  Sections : TStringList;
begin
Sections := TStringList.Create();
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'realmlist.ini');
AssignFile(realmlist, 'D:\Programme\World of Warcraft\realmlist.wtf');
if FileExists('D:\Programme\World of Warcraft\realmlist.wtf'then
  Reset(realmlist)
else
  ReWrite(realmlist);

try
  ini.ReadSections(Sections);
  for i := 0 to Sections.Count-1 do
    with ListView.Items.Add do
    begin
      Caption := Sections[i];
    end;
finally
  Sections.Free;
end;
end;


Wenn ich mein Programm starte lädt er alle verfügbaren Sections in die linke Spalte. Richtig so.

Frage: Wie bekomme ich jetzt die Werte (Also z.B. vom Abschnitt [SERVER1] IP=WERT ... Also wie bekomme ich den Wert in meine rechte Spalte? Das gabs beim ausprobieren wieder probleme mit TStrings und String ... Habs mit ReadSectionValues versucht...

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Habs gelöst. Für alle, die eine Antwort suchen ...


Delphi-Quelltext
1:
SubItems.Add(ini.ReadString(Sections[i], 'IP'''));