// Hiermit kann man TStrings (TStringlist, TListbox.Items usw.) in eine
// Ini-Datei schreiben. Siehe auch
ein Richedit in eine INI-Datei schreiben

// Getestet mit D4 unter WinME

// Variante 1:

uses IniFiles; 
 
procedure schreiben(sektion, datei: string; sl: TStrings); 
var ini: TInifile; 
  s: string; 
begin 
  s := stringreplace(sl.text, #13#10, #1, [rfreplaceall]); 
  ini := TInifile.create(datei); 
  ini.writestring(sektion, 'Strings', s); 
  ini.free; 
end; 
 
procedure lesen(sektion, datei: string; sl: TStrings); 
var ini: TInifile; 
  s: string; 
begin 
  ini := TInifile.create(datei); 
  s := ini.readstring(sektion, 'Strings', 'FEHLER'); 
  ini.free; 
  sl.text := stringreplace(s, #1, #13#10, [rfreplaceall]); 
end; 

// ----------------------------------------------------------

// Variante 2:

uses IniFiles; 
 
procedure schreiben(sektion, datei: string; sl: TStrings); 
var ini: TInifile; 
  x: integer; 
begin 
  ini := TInifile.create(datei); 
  ini.erasesection(sektion); 
  ini.writeinteger(sektion, 'Anzahl', sl.count); 
  for x := 1 to sl.count do 
    ini.writestring(sektion, 'Strings' + inttostr(x), sl[x - 1]); 
  ini.free; 
end; 
 
procedure lesen(sektion, datei: string; sl: TStrings); 
var ini: TInifile; 
  x, y: integer; 
begin 
  sl.clear; 
  ini := TInifile.create(datei); 
  y := ini.readinteger(sektion, 'Anzahl', 0); 
  for x := 1 to y do 
    sl.add(ini.readstring(sektion, 'Strings' + inttostr(x), '')); 
  ini.free; 
end;

// ----------------------------------------------------------

// Variante 3:
uses IniFiles; 
 
procedure schreiben(sektion, datei: string; sl: TStrings); 
var ini: TInifile; 
  x: integer; 
begin 
  ini := TInifile.create(datei); 
  ini.erasesection(sektion); 
  for x := 0 to sl.count - 1 do 
    ini.writestring(sektion, 'Strings' + inttostr(x), sl[x]); 
  ini.free; 
end; 
 
procedure lesen(sektion, datei: string; sl: TStrings); 
var ini: TInifile; 
  x: integer; 
begin 
  ini := TInifile.create(datei); 
  ini.readsectionvalues(sektion, sl); 
  ini.free; 
  for x := 0 to sl.count - 1 do 
    sl[x] := copy(sl[x], pos('=', sl[x]) + 1, maxint); 
end; 
 
// ----------------------------------------------------------

// Beispielaufrufe (für alle 3 Varianten)
procedure TForm1.Button1Click(Sender: TObject); 
var sl: TStringList; 
begin 
  sl := TStringList.create; 
// --- zum Testen --- 
  sl.add('Test1'); 
  sl.add('Test2'); 
  sl.add('Test3'); 
// ------------------- 
  schreiben('Strings', 'c:\test.ini', sl); 
  sl.free; 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  Memo1.Lines.clear; 
  lesen('Strings', 'c:\test.ini', Memo1.lines); 
end;


// P.S.
// Die Varianten sind untereinander nicht kompatibel; d.h., wenn man
// beispielsweise mit Variante 2 schreibt, kann man auch nur mit der
// Variante 2 lesen.


Zugriffe seit 6.9.2001 auf Delphi-Ecke