![]() |
SJ Config Utils 1.0 RC 3
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo!
Diese Unit stellt eine Klasse zur automatischen Verwaltung der Einstellungen zur Verfügung. Um diese in einem eigenen Programm zu verwenden, bindet man die Unit ein und leitet eine eigene Einstellungsklasse von TAppConfigManager ab. Diese Klasse muss dann bestimmte Methoden implementieren und bekommt die notwendigen Objekte zum Auslesen der Einstellungen geliefert. Mehr dazu im zweiten Teil unter ![]() Eine Demo ist mit im Download enthalten. Der Wizard davon sieht so aus: ![]() ![]() Ein Forum zum Support und mit weiteren Informationen entsteht hier: ![]() Features:
MPL 1.1 oder GPL 2.0 oder LGPL 2.1 Installation: Die Unit muss entweder in den Bibliothekspfad aufgenommen oder dem Projekt hinzugefügt werden, damit die Unit über die uses-Klausel eingebunden werden kann. Zur Verwendung siehe die Details im zweiten Teil: ![]() Unterstützte Delphiversionen: Delphi 6, 7, 2006, 2007 und 2009 (in Delphi 7 und früher fehlt die XML-Unterstützung, daher muss in Source\SJConfigUtils.inc der Schalter für XML-Unterstütuzung deaktiviert werden) Unterstützte Windowsversionen: Windows 2000, XP, Vista und 7 Weitere Planung:
![]() Ich habe die Unit auch hier vorgestellt: ![]() ![]() Ich habe mal ein kleines Demovideo gemacht zur besseren Illustration des Integrationstools: ;-) ![]() Und für den IE als Webseite: ![]() Schönen Gruß, Sebastian |
Re: SJ Config Utils 1.0 beta 1
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:
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.
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; ... Für das Auslesen und Speichern der Einstellungen gibt es ReadString, WriteString, und so weiter. Das sieht dann so aus:
Delphi-Quellcode:
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.
procedure TAppConfig.LoadFromXml(Ini: IXMLDocument);
begin if AccessManager.InitReadLocation('Userinfo', sIniSectionOpenError) then begin fUserName := AccessManager.ReadString('Username', sIniValueNotFound); end; end; ... 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. |
Re: SJ Config Utils 1.0 beta 1
Ich habe mal einen Blick auf den Sourcecode geworfen...
Relativ häufig ist Folgendes zu sehen:
Delphi-Quellcode:
Diese Case-Anweisungen könnten durch das
case FLocationType of
icltINI: ... icltXml: ... icltRegistry: ... else ... end; ![]() Man benötigt dazu eine Basisklasse mit virtuellen Methoden und davon abgeleitet jeweils eine Klasse für die Ini-Datei, XML, Registry. Man bildet so eine Art Treibersystem, in dem man den physikalischen Zugriff auf die Daten (Inifile, XML,...) einfach austauschen kann. Man könnte das später leicht erweitern und z.B. einen Treiber für verschlüsselte Inifiles schreiben. Oder man speichert die Daten im Active Directory oder auf einem Webserver über HTTP. Die Klasse TAccessManager erzeugt intern also ein Objekt der jeweiligen "Treiberklasse" und deligiert das Lesen und Schreiben von Daten an dieses Objekt. |
Re: SJ Config Utils 1.0 beta 1
Ja, das wäre eine gute Idee, ich habe da auch Überlegungen angestellt, es dann aber doch erst einmal so gelassen. Damit das klappt, müsste ich den ganzen AccessManager dafür hernehmen, da der die für das konkrete Auslesen nötigen Daten beinhaltet.
Eine Struktur ähnlich diesem Pattern benutze ich in einem Projekt, in dem ich diese Unit selbst benutze auch schon (meinem Periodensystem, da für die verschiedenen Darstellungsmodelle). Ich muss die gesamte Struktur noch einmal ein wenig überdenken. |
Re: SJ Config Utils 1.0 beta 1
Zitat:
Delphi-Quellcode:
procedure TAccessManager.CreateStrategieObj;
begin case FLocationType of icltINI: FStrategieObj := TIniStratege.Create(self); // ^^^^ // damit kennt das Strategieobjekt den AccessManager und kann bei Bedarf // bestimmte Informationen abgreifen ... end; Zitat:
|
Re: SJ Config Utils 1.0 beta 1
Sebastian hat den Beitrag im Bereich Open Source gepostet. Er hat sicherlich nichts dagegen, wenn man seinen Coder verbessert/erweitert :zwinker:
|
Re: SJ Config Utils 1.0 beta 1
Klingt für mich sehr nützlich. Bei meinen (wenigen) größeren Projekten war die Speicherung der Konfiguration jedesmal von einer neuen Strategie geprägt. Etwas Einheitliches, Wiederverwendbares wollte mir da nie einfallen.
Werde SJ Config bei der nächsten größeren Aufgabe sicher mal Testen! |
Re: SJ Config Utils 1.0 beta 1
Ich werde heute auch noch eine neue Version meines Periodensystems veröffentlichen, da hat der Einbau in die bereits bestehenden Einstellungen auch problemlos geklappt.
Ich habe jetzt eine aktualisierte Version hochgeladen, die ich mit Delphi 6, 7, 2006, 2007 und 2009 erfolgreich getestet habe. Zudem habe ich einen Flüchtigkeitsfehler beim Streamformat behoben, der dazu geführt hatte, dass es gar nicht funktionierte. Unter Delphi 6 und 7 muss einfach der Schalter für die XML-Unterstützung deaktiviert werden, die Formulare der Demo einmal alle geöffnet und die Fehlermeldungen ignoriert werden. Dann sollte es laufen. |
Re: SJ Config Utils 1.0 beta 2
So, ich habe einmal eine neue Betaversion hochgeladen.
Neuerungen:
|
Re: SJ Config Utils 1.0 RC 1
Es gibt eine neue Version. Jetzt kann man die Einstellungen auch an die Exe anhängen. Dafür habe ich (auf einen Vorschlag hin) mein Projekt
![]() Diese Möglichkeit könnte insbesondere für die schnelle portable Weitergabe von Tools sehr nützlich sein. Die neue Version habe ich eingehender getestet. Da mir keine Fehler aufgefallen sind und es auch keine Meldungen mehr zu Fehlern gab, gebe ich die Version als Release Candidate heraus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz