Teil 2: Implementierung im eigenen Programm
Wie ich bereits gesagt habe muss die eigene Einstellungsklasse von TAppConfigManager abgeleitet werden. Wenn bereits eine solche Klasse existiert, kann diese einfach entsprechend ergänzt werden. So habe ich es bei meinen Projekten auch gemacht.
Dann müssen ein paar Methoden überschrieben bzw. implementiert werden. Insgesamt sieht das dann so aus:
Delphi-Quellcode:
uses
XMLIntf, IniFiles, Registry, SJConfigUtils, ...;
type
type
TAppConfig = class(TAppConfigManager)
protected
procedure LoadFromStream(Data: TStream); override;
procedure SaveToXml(Ini: IXMLDocument); override;
procedure LoadFromINI(Ini: TCustomIniFile); override;
procedure LoadFromRegistry(Reg: TRegistry; ParentPath: String); override;
procedure SaveToStream(Data: TStream); override;
procedure LoadFromXml(Ini: IXMLDocument); override;
procedure SaveToINI(Ini: TCustomIniFile); override;
procedure SaveToRegistry(Reg: TRegistry; ParentPath: String); override;
procedure RunConfigWizard; override;
procedure ApplyStandardSettings; override;
procedure GetProgramInfo(var Author, ProductName, ProductVersion: string); override;
end;
implementation
uses
ConfigWizard;
{ TAppConfig }
// Allgemeine Aufgaben
procedure TAppConfig.RunConfigWizard;
begin
frmConfigWizard := TfrmConfigWizard.Create(nil);
frmConfigWizard.ShowModal(Self);
end;
procedure TAppConfig.ApplyStandardSettings;
begin
fUserName := 'Standardname';
end;
procedure TAppConfig.GetProgramInfo(var Author, ProductName,
ProductVersion: string);
begin
Author := 'Sebastian Jänicke';
ProductName := 'SJ Config Utils Demo';
ProductVersion := '1.0';
end;
...
Bei RunConfigWizard muss ein eigener Einstellungswizard angezeigt werden, der den Benutzer auch nach dem Ort für die Einstellungen fragen sollte. Ihr könnt natürlich den der Demo übernehmen und anpassen.
Für das Auslesen und Speichern der Einstellungen gibt es ReadString, WriteString, und so weiter. Das sieht dann so aus:
Delphi-Quellcode:
procedure TAppConfig.LoadFromXml(Ini: IXMLDocument);
begin
if AccessManager.InitReadLocation('Userinfo', sIniSectionOpenError) then
begin
fUserName := AccessManager.ReadString('Username', sIniValueNotFound);
end;
end;
...
Dabei wird mit InitReadLocation ein Knoten einer
XML-Datei, ein Schlüssel in der Registry oder eine Sektion einer INI geöffnet und dann darin die Werte gelesen.
Eine andere Möglichkeit ist, die übergebenen Objekte direkt zu verwenden um die
XML-Datei usw. direkt auszulesen oder zu schreiben.
Welche Speicherarten verfügbar sind und welche Methoden dementsprechend implementiert werden müssen, wird in der
Unit SJConfigUtils ganz oben per Compilerdirektive festgelegt.
Eine komplette Implementierung findet ihr in der mitgelieferten Demo.