Einstellungen die ich applikationsweit benötige, verwalte ich in einem TMemdataset.
Initialisierung, Zugriff, etc habe ich bisher in einem Datamodul gemacht das mit der Applikation erzeugt wurde.
Code: Alles auswählen
unit udmSettings;
....
type
TdmSettings = class(TDataModule)
...
end;
var
dmSettings: TdmSettings;
implementation
....
in der *.lpr Datei:
Code: Alles auswählen
begin
RequireDerivedFormResource := True;
Application.Initialize;
....
Application.CreateForm(TdmSettings, dmSettings); //Einstellungen verwalten
Application.CreateForm(TfrmMain, frmMain); //Hauptformular erzeugen
Application.Run;
end.
Somit war alles was im Datenmodul behandelt wurde auch applikationsweit über die Variable dmSettings verwendbar/sichtbar - es musste nur das Datenmodul per uses udmSettings in die jeweilige Unit eingebunden werden.
Nun hat jede Applikation so ihre kleinen Eigenheiten und man kann nicht immer alles über einen Kamm scheren.
Bislang habe ich dann das Datenmodul in dem die Funktionen lagen vererbt und abweichendes Verhalten im Nachfolger eingebaut.
Jetzt hatte schon das alte Delphi mit der Vererbung von Datenmodulen seine liebe Not und Lazarus scheint da auch noch eine Macke zu haben.
Gelegentlich findet die IDE zusammengehörende Komponenten dann nicht mehr und zerschießt die Vererbung -- kann auch sein dass ich dazu zu dämlich bin, unschön ist diese Lösung allemal.
Ich versuchte jetzt alle nötigen Funktionen direkt in eine Unit zu packen (ohne *.lfm) und alle benötigten Komponenten selbst zu erstellen und ggfs auch zuzuweisen.
Passt auch, soweit ich das bis jetzt beurteilen kann.
Nur muss ich das Objekt mit den Einstellungen aus der Klasse selbst erzeugen und damit bin ich mit meinem Latein irgendwie am Ende.
Dabei geht es mir nicht darum wie ich ein Objekt erzeuge sondern um die Sichtbarkeit des erzeugten Objektes in der Applikation.
Wo bzw wie erzeuge ich das Objekt das meine Einstellungen verwaltet damit alle Units und Forms darauf zur Laufzeit zugreifen können?
Gibt es da eine ebenso elegante Lösung wie die mit den Datamodulen ?
Oder muss ich es im Hauptformular erzeugen und alle Units müssen das Hauptformular mit eingebunden haben damit man darauf zugreifen kann?
Oder eine allgemeine Objektliste auf die man irgendwie kommt?
Die Anforderung ist sicher nicht sehr exotisch, Programmparameter braucht fast jeder -- aber wie löst ihr das elegant?
Danke im voraus!