Popov - Di 03.02.04 21:13
Titel: ...ListBox, Memo usw. in eine Ini speicher und wieder laden?
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.
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: 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; |