Hallöche...
Ich verwende als Konfiguration in meinen Projekten am liebsten Ini-Dateien statt der Registry. Dabei hat mich eigentlich immer gestört, dass TIniFile
- keinen direkten Zuriff auf Einträge in der Ini bietet sondern mehr oder weniger nur eine in eine Klasse verpackte prozedurale Programmierung hat
- Nicht wirklich eine Streaming-Fähigkeit hat, man kann nicht direkt aus Streams lesen oder in Streams speichern.
- (zumindest in D7) nicht Unicode-fähig ist
- Keine umkonfigurierbaren Kommentar-Einleit-Zeichen hat
- Keine Zeilenumbrüche innerhalb von Variablenwerten unterstützt
- Keine Funktion zum regelmäßigen automatischen Speichern hat
Darum hab ich mal ein bissi was gebastelt. Herausgekommen ist eine Klasse, die einen Großteil der Properties und Methoden von TIniFile bietet (also zu 99% kompatibel sein sollte), per Compilerschalter zwischen einer
Unicode- und einer
ANSI-Version umschaltbar ist und auf die einzelnen Sections und Idents direkt zugreifen kann. Ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
Ini: TUniObjectIni;
begin
Ini:= TUniObjectIni.Create('C:\Test.txt');
try
Ini['Section1']['Ident1'].Str:= 'Test 1';
Ini['Section2']['Ident1'].Str:= 'Zeile 1' + #13#10 + 'Zeile 2';
Ini['Section2']['Number'].Int:= 1234;
Ini['Section2']['Float'].Float:= 12.34;
Ini['Section2']['Timestamp'].DateTime:= Now;
finally
Ini.UpdateFile;
Ini.Free;
end;
end;
Am Rande bemerkt verwendet TUniObjectIni
nicht das Windows-
API für die Dateigeschichten (Stichwort WritePrivateProfileString) sondern arbeitet komplett mit einer StringList. Dadurch sollte der Code auch relativ leicht zu Lazarus portierbar sein. Es wird aber nur beim Laden und Speichern von Dateien auf der StringList rumfuhrwerkt, alles andere passiert komplett im Speicher.
Als
Unicode-Backend verwende ich in dem Fall SynUnicode (siehe SynEdit-Komponenten bei Sourceforge), man könnte aber genausogut jede andere Implementierung einer
Unicode-fähigen StringList verbauen. Die jetzige ist jedenfalls schlau genug, um sowohl
ANSI- als auch
Unicode-codierte Dateien zu laden. Einmal als
ANSI geladene Dateien bleiben auch beim Speichern
ANSI, es sei denn man fügt
Unicode ein.
Schauts euch mal an und gebt mal ein bisschen Feedback dazu.
Greets
Cody