Und wo ist jetzt das Problem daraus Events zu machen und entsprechend zu verdrahten?
Irgendwo musst du ansetzen und etwas übergeben, ansonsten legst du dich starr fest.
Wo ist egal, und wenn die Komponenten einfach ein "Singleton" ansprechen und sich darüber die Instanz zum Speichern/Laden holen.
Diesem Singleton übergibst du dann einfach beim Start der Anwendung die konkrete Instanz und gut.
Also mal ganz simpel:
Delphi-Quellcode:
unit MyUserSettings;
interface
type
IUserSettingsStorage =
interface
['
{F3E5657B-39EF-4FA1-A601-8AFCEE50D6D1}']
procedure WriteString(
const AName, AValue :
string );
function ReadString(
const AName, ADefault :
string ) :
string;
end;
TUserSettings =
class
private
class var _Storage : IUserSettingsStorage;
private
class function GetStorage : IUserSettingsStorage;
static;
class procedure SetStorage(
const Value : IUserSettingsStorage );
static;
public
class property Storage : IUserSettingsStorage
read GetStorage
write SetStorage;
end;
implementation
{ TUserSettings }
class function TUserSettings.GetStorage : IUserSettingsStorage;
begin
// Wenn _Storage NIL, dann könnte man auch eine DUMMY/NULL-Instanz zurückgeben, die einfach nichts macht
// dann spart man sich die Überprüfung, ob es eine Instanz gibt
Result := _Storage;
end;
class procedure TUserSettings.SetStorage(
const Value : IUserSettingsStorage );
begin
_Storage := Value;
end;
end.
und in der Komponente dann
Delphi-Quellcode:
interface
type
TMyComponent = class(...)
protected
procedure DoLoadUserSettings;
procedure DoSaveUserSettings;
end;
implementation
uses
MyUserSettings;
procedure TMyComponent.DoSaveUserSettings;
begin
TUserSettings.Storage.WriteString( 'Name', Name );
end;
procedure TMyComponent.DoLoadUserSettings;
begin
Name := TUserSettings.Storage.ReadString( 'Name', Name );
end;
Es gibt da natürlich noch eine ganze Bandbreite an Spielmöglichkeiten.
Die Storage gibt mir eine spezielle Instanz für die Komponente zurück
TUserSettings.Storage('TForm1.PageControl1').WriteString('Name',Name);
etc., etc.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)