(in Progress: Zielversion LRC 0.9 M2)
Sammlung von Lazarus-Steuerelementen, welche direkt mit der Registry verbunden werden (lesen/schreiben)
Inhaltsübersicht:
- 0 Anmerkung zur neuen Version
- 1 Einleitung
- 2 Packagenamen
- 3 Installation
- 3.1 Versionen
- 3.2 Reihenfolge
- 3.3 Absolute Pfade
- 4 LazarusRegistryControls (LRC) Funktionalität
- 4.1
HKEY_CURRENT_USER - 4.2 Standardwerte
- 4.3 Synchronisierung und Gruppierung
- 4.3.1 Synchronisierung
- 4.3.2 Gruppierung
Mit der ersten Änderung für die LRC 0.9 M2 wird die Beispielanwendung: example.exe nicht
mehr lauffähig sein. Eine lauffähige Version der LRC mit Beispielanwendung finden sie unter folgendem Link:
Die Änderungen zur Zielversion LRC 0.9 M2 werden zentrale Bestandteile der aktuellen Version LRC 0.9 M1 betreffen. Die neue Version wird definitv nicht abwärtskompatibel sein.
Folgende Änderungen sind vorgesehen (s. Issues):
- Packages umorganisieren
- RegistrySettings überarbeiten
- Neue Komponenten
- Neue Methoden für TRegistrySource
- Vorhandene Komponenten erweitern
- Beispielanwendung überarbeiten
- Automatisierter Test
Die LazarusRegistryControls (LRC) sind direkte Ableitung einer Teilmenge aus den Standard- und den Additional-Steuerelemte der LCL von Lazarus. Sie werden auf einem eigenen Reiter der Komponentenpalette "Registry Controls" installiert. Die Auswahl der abgeleiteten Steuerelement richtet sich nach der Häufigkeit ihrer Nutzung (TEdit, TLabel, TComboBox, TCheckBox, TListBox, TRadioButton, TRadioGroup, TCheckListBox, TCheckGroup, TValueListEditor). Diese Steuerelemente sollten nur genutzt werden, um Werte in der Registry zu verwalten. Sie sind in der vorliegenden Version nur für den Einsatz unter Windows sinnvoll.
-
registrysource.lpk:
- TRegistrySource
- Erweiterung der Eigenschaften
- Property- und Komponenteneditoren
-
registrycontrols.lpk:
- TRegEdit
- TRegLabel
- TRegComboBox
- TRegCheckBox
- TRegListBox
- TRegRadioButton
- TRegRadioGroup
- TRegCheckListBox
- TRegCheckGroup
- TRegValueListEditor
Für die Installation sind keine zusätzlichen Packages (etc.) notwendig. In der vorliegenden Version nur unter Windows sinnvoll.
Lazarus: 1.4.0
FPC: 2.6.4
DebugServer: s. readme.md in ./test
LazarusRegistryControls (LRC): Zielversion LRC 0.9 M2
- registrysource.lpk
- registrycontrols.lpk
Bei der Entwicklung wurde auf relative Pfadangaben für die IDE-Umgebung geachtet.
Trotzdem haben sich in einigen Dateien absoulte Pfade eingefunden. Dabei handelt
es sich immer um Pfadangaben für die Dokumentation. Der Pfadanteil
C:\Users\Alfred\Sourcen\GitHub\LazarusRegistryControls\ muss in folgenden Dateien angepasst
werden:
- docuProject.ldp in ..\doc\
- docuProjectCtrl.ldp in ..\doc\
- registrycontrols.lpk in ..\package\
- registrysource.lpk in ..\package\
- _makeskel.bat in ..\soruce\
- createDocu.bat in ..\documentation\
Mit Hilfe der LRC soll Ordnung bezüglich des Registryzugriff in einem Projekt hergestellt werden. Dabei wurde darauf geachtet, das so wenig wie möglich an Quelltext vom Entwickler geschrieben werden muß, um auf Daten in der Registry zu zugreifen.
Die abgeleiteten Steuerelement werden über die zentrale Komponente (TRegistrySource) mit der Registry verbunden. Über eine Erweiterung der Eigenschaften (RegistrySettings) der abgeleiteten Steuerelement können spezifische Informationen für Schlüssel der Registry hinterlegt werden, welche genutzt werden, um Daten aus der Registry zu lesen und in die Registry zu schreiben.
Die TRegistrySource-Komponente stellt den gesamten Zugriff auf die Registry zur Verfügung. Sie kann auch direkt, unabhängig von Steuerelementen, verwendet werden, um einen Zugriff auf die Registry herzustellen:
try
Screen.Cursor := crHourGlass;
// Zentraler Registryzugriff, eventuel auch verbunden mit Steuerlementen (z.B.: TRegEdit)
// Alle notwendigen Einstellungen für den Zugriff auf die Registgry finden sich in den
// Eigenschaften dieser Komponente wieder
with RegistrySource1 do
begin
// Schaltet die Synchronisierung von angebundenen Steuerelementen ab
DoSyncData := False;
// Veranlasst das ein Grundschlüssel mit Standardwerten aufgebaut wird
WriteDefaults := True;
// Schreibt einen String
WriteString('Section1', 'Ident', 'Value');
// Schreibt einen Integer`
WriteInteger('Section2', 'Ident', 1);
// Schreibt einen Boolean
WriteBool('Section3', 'Ident', True);
// Aktualisert alle angebundenene Steuerelemente
RefreshClientData('', 0);
DoSyncData := True;
end;
finally
Screen.Cursor := crDefault;
end;
Die Steuerelemente schreiben und lesen immer in das Registryroot: HKEY_CURRENT_USER.
Unterhalb vom Registryroot wird eine Grundschlüssel eingerichtet. Dieser Grundschlüssel
sollte immer in den Schlüssel Software verweisen.
Unterhalb des Schlüssel Software sollte der Name der Firma oder der Organisation,
welche das Projekt/Programm vertreibt aufgeführt werden.
Unterhalb des Schlüssels für die Firma/Organisation sollte eine Bezeichnung für das
Projekt eingeführt werden.
Um meherere Versionen eines Projektes unter Umständen mit verschiedenen Schlüssel
versorgen zu können sollte, unterhalb des Schlüssels für das Projekt eine eindeutige
Kennung angegeben werden. Eine solche eindeutige Kennung könnte eine GUID sein.
In der RegistrySource (TRegistrySource) werden für diese Einzelelemente Eigenschaften
angeboten (Eigenschaften: GUID, ORGANISATION, PROJECT).
Diese Eigenschaften können in einem Grundschlüssel als Variablen hinterlegt werden.
(Variablen: %%GUID%%, %%ORGANISATION%%, %%PROJECT%%)
Ein Grundschlüssel könnte also wie folgt aussehen:
SOFTWARE\%%ORGANISATION%%\%%PROJECT%%\%%GUID%%
In dem Beispielprogramm wird daraus:
Software\ExampleFactory\LazarusRegistryControls\{51D8EEB4-A549-4B08-BFCB-731DEC3E82AE}
Standardwerte für nicht erfolgreiche Zugriffe auf die Registry (in der Regel
Schlüssel nicht vorhanden) können direkt am Steuerelement in den RegistrySettings
(Eigenschaft: Default) definiert werden. Als zweite Möglichkeit kann man am
Steuerelement einen Schlüsselpfad definieren, über den Defaults in der Registry
verwaltet werden können. Dies ermöglicht personalisierte Standardwerte, die z.B.
durch die Installation oder einem Update eingerichtet werden. Ein Administarionswerkzeug
könnte ebenfalls diese Standards bearbeiten.
Der Grundschlüssel für Standards, sollte nach ähnlichen Regeln aufgebaut werden,
wie der Grundschlüssel im HKEY_CURRENT_USER. Die Eigenschaften: GUID, ORGANISATION, PROJECT und
deren Einsatz durch die entsprechenden Variablen stehen in gleichwer Weise zur Verfügung.
Ein Grundschlüssel könnte also wie folgt aussehen:
SOFTWARE\%%ORGANISATION%%\%%PROJECT%%\DEFAULTS\%%GUID%%
In dem Beispielprogramm wird daraus:
Software\ExampleFactory\LazarusRegistryControls\DEFAULTS\{51D8EEB4-A549-4B08-BFCB-731DEC3E82AE}
Wenn als Grundschlüssel HKEY_LOCAL_MACHINE gewählt wird muss bedacht werden das bei eingeschalteter
UAC das Bearbeiten von Inhalten in diesem Grundschlüssel nur mit Adminrechten erlaubt ist. Das Lesen
von Inhalten hingegen ist schon einem Standardbenutzer erlaubt.
Auf Wunsch können Steuerelemente automatisch veranlasst werden, sich zu aktualisieren, wenn der Inhalt eines beliebigen Steuerelementes geändert wurde. Voraussetzung ist, das alle diese Steuerelement mit der selben RegistrySoruce (TRegistrySource) verbunden sind, wie das Steuerelement dessen Wert geändert wurde. Jedes Steuerelement kann über die Eigenschaft DoSyncData bestimmen, ob es an einer automatischen Synchronisierung teilnimmt. Die Eigenschaft DoSyncData an der zentralen Komponente (TRegistrySource) bestimmt ob überhaupt synchronisiert werden soll.
Über die Eigenschaft GroupIndex der erweiterten Eigenschaften (RegistrySettings) können Steuerelemente zu Gruppen zusammengefasst werden. Der GroupIndex=0 steht dabei immer für "keine Zuordnung zu einer Gruppe".
Wenn ein Steuerelement mit dem GroupIndex=0 seinen Wert ändert, die Synchronisierung überall eingeschaltet ist, dann werden auch alle anderen Steuerelemente veranlasst, ihre Daten zu aktualisieren, unabhängig ob deren GroupIndex<>0 ist.
Wenn ein Steuerelement mit dem GroupIndex=1 seinen Wert ändert, dann werden nur die Steuerelemente zur Synchronisierung veranlasst, welche ebenfalls den GroupIndex=1 besitzen.