Entwickler-Ecke

Dateizugriff - ...ListBox, Memo usw. in eine Ini speicher und wieder laden?


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:

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:
//Speichert den ganzen Inhalt einer ListBox in eine Ini-Section.
//Vorsicht! die ganze Ini-Sektion wird dabei gelöscht und ersetzt.
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{Popov}


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:

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:
//Läd den ganzen Inhalt einer Ini-Section in eine ListBox.
//Wird Ini-Sektion nicht gefunden, dann wird nichts geladen.
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
      //Prüft (vor dem Löschen) ob Section in der Ini vorhanden ist
      ReadSections(sl);
      sl.Text := AnsiLowerCase(sl.Text);

      if sl.IndexOf(AnsiLowerCase(Section)) > -1 then begin
        ReadSection(Section, sl);

        List.Clear;

        //Übergibt Inhalte an die Listbox
        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{Popov}


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;