Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 03.02.04 21:13 
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.

ausblenden 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:

ausblenden 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.

ausblenden volle Höhe 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:

ausblenden 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;

_________________
Popov