Hier ein Tipp wie man den Inhalt einer ListBox, einer Memo, einer StringList oder jeder anderen Eigenschaft die TStrings benutzt in eine Ini speichern kann und/oder wieder laden.
Es werden zwei Funktionen benötigt. Eine für Speichern und eine für Laden.
Funktion zum Speichern einen TStrings in eine Ini:
Es werden drei Parameter benötigt:
- Pfad der Ini-Datei
- Sektion in der Ini in die gespeichert werden soll
- Der Inhalt in Form einer TStrings
Es gibt ein True zurück wenn alles geklappt hat und ein False wenn es Probleme gab.
Hinweis: beim Speichern wird der ganze Inhalt der Sektion gelöscht und neu geschreiben. Es sollte also eine eigene Sektion für den Inhalt genommen werden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function SaveListBoxToIni(const IniPath, Section: String; List: TStrings): Boolean; var k: Integer; begin with TIniFile.Create(IniPath) do try EraseSection(Section);
for k := 0 to List.Count - 1 do WriteString(Section, IntToStr(k), Format('"%s"', [List[k]]));
Result := True; finally Free end; end; |
Beispiel:
Hier wird der Inhalt der ListBox1 in die Ini gesichert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var IniPath: String; begin IniPath := ChangeFileExt(Paramstr(0), '.ini'); if SaveListBoxToIni(IniPath, 'ListBox1', ListBox1.Items) then ShowMessage('Alles gespeichert!'); end; |
Funktion zum Laden eines TStrings Inhalts aus einer Ini:
Es werden drei Parameter benötigt:
- Pfad der Ini-Datei
- Sektion in der Ini aus der geladen werden soll
- Der Behälter für den Inhalt in Form einer TStrings
Es gibt ein True zurück wenn alles geklappt hat und ein False wenn es Probleme gab.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| function LoadListBoxFromIni(const IniPath, Section: String; List: TStrings): Boolean; var k: Integer; MissingStr: Boolean; s, ErrorCode: String; sl: TStringList; begin MissingStr := False; ErrorCode := DateToStr(Now);
with TIniFile.Create(IniPath) do try sl := TStringList.Create; try ReadSections(sl); sl.Text := AnsiLowerCase(sl.Text);
if sl.IndexOf(AnsiLowerCase(Section)) > -1 then begin ReadSection(Section, sl);
List.Clear;
for k := 0 to sl.Count - 1 do begin s := ReadString(Section, sl.Strings[k], ErrorCode); if IntToStr(k) <> sl.Strings[k] then MissingStr := True; if s = ErrorCode then MissingStr := True else List.Add(s); end; end; finally sl.Free end;
Result := True; if MissingStr then Result := False;
finally Free end; end; |
Beispiel:
Hier wird der Inhalt aus der Ini in die ListBox1 geladen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button2Click(Sender: TObject); var IniPath: String; begin IniPath := ChangeFileExt(Paramstr(0), '.ini'); if LoadListBoxFromIni(IniPath, 'ListBox1', ListBox1.Items) then ShowMessage('Alles geladen!'); end; |