Hatte gerade mal ein bisserl "Langeweile" und da viel mir ein, dass es doch die Methode Loaded gibt, die erst nach dem Erstellen aller automatisch zu erstellenden Formulare eines Programmes aufgerufen wird.
Da ich das nicht so mal eben implementieren kann, hab' ich mal 'ne KI befragt:
Zitat von
Frage:
Wenn ich in einem Delphiprogramm nach der Initialisierung aller Formulare für die darauf befindlichen TControl-Nachfahren eine einheitliche Konfiguration an einer zentralen Stelle durchführen möchte, wie ließe sich dies realisieren? Die Konfigurationsdaten sollten ggfls. aus einer Ini-Datei (oder auf ähnlichem Weg) ausgelesen werden. Im Idealfall wäre dies alles an einer zentralen Stelle, eventuell einer eigenen
Unit, zu realisieren.
Zitat von
Antwort:
Um eine einheitliche Konfiguration für alle TControl-Nachfahren in allen Formularen eines Delphi-Programms nach der Initialisierung durchzuführen, können Sie die folgende Lösung implementieren:
Erstellen Sie eine separate
Unit für die zentrale Konfiguration, z.B. "ConfigManager.pas".
In dieser
Unit definieren Sie eine Klasse TConfigManager mit Methoden zum Laden der Konfiguration aus einer INI-Datei und zum Anwenden der Konfiguration auf die Formulare.
Verwenden Sie die Loaded-Methode des Hauptformulars, um die Konfiguration nach der Initialisierung aller Formulare anzuwenden.
Hier ist ein Beispiel für die Implementierung:
Delphi-Quellcode:
unit ConfigManager;
interface
uses
System.SysUtils, System.Classes,
Vcl.Forms,
Vcl.Controls, System.IniFiles;
type
TConfigManager =
class
private
FIniFile: TIniFile;
public
constructor Create;
destructor Destroy;
override;
procedure LoadConfig;
procedure ApplyConfigToForms;
end;
implementation
constructor TConfigManager.Create;
begin
inherited;
FIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '
.INI'));
end;
destructor TConfigManager.Destroy;
begin
FIniFile.Free;
inherited;
end;
procedure TConfigManager.LoadConfig;
begin
// Laden Sie hier Ihre Konfigurationsdaten aus der INI-Datei
// Beispiel:
// FButtonColor := FIniFile.ReadInteger('Controls', 'ButtonColor', clBtnFace);
end;
procedure TConfigManager.ApplyConfigToForms;
var
i, j: Integer;
Form: TForm;
Control: TControl;
begin
for i := 0
to Screen.FormCount - 1
do
begin
Form := Screen.Forms[i];
for j := 0
to Form.ComponentCount - 1
do
begin
if Form.Components[j]
is TControl
then
begin
Control := TControl(Form.Components[j]);
// Wenden Sie hier Ihre Konfiguration auf die Controls an
// Beispiel:
// if Control is TButton then
// TButton(Control).Color := FButtonColor;
end;
end;
end;
end;
end.
Zitat:
Im Hauptformular überschreiben Sie die Loaded-Methode, um die Konfiguration anzuwenden:
Delphi-Quellcode:
unit MainForm;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs, ConfigManager;
type
TFormMain =
class(TForm)
private
FConfigManager: TConfigManager;
protected
procedure Loaded;
override;
public
constructor Create(AOwner: TComponent);
override;
destructor Destroy;
override;
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
constructor TFormMain.Create(AOwner: TComponent);
begin
inherited;
FConfigManager := TConfigManager.Create;
end;
destructor TFormMain.Destroy;
begin
FConfigManager.Free;
inherited;
end;
procedure TFormMain.Loaded;
begin
inherited;
FConfigManager.LoadConfig;
FConfigManager.ApplyConfigToForms;
end;
end.
Zitat:
Diese Lösung bietet folgende Vorteile:
Zentralisierte Konfiguration in einer separaten
Unit.
Automatische Anwendung der Konfiguration auf alle Formulare und Controls nach der Initialisierung.
Einfache Erweiterbarkeit für verschiedene Control-Typen und Konfigurationsoptionen.
Stellen Sie sicher, dass Sie die ConfigManager-
Unit in den Uses-Klauseln aller Formulare einbinden, die konfiguriert werden sollen. Diese Methode ermöglicht eine flexible und wartbare Lösung für die einheitliche Konfiguration aller Formulare und Controls in Ihrem Delphi-Programm.
Nur so als Idee. Etwas vom Prinzip sehr Ähnliches, bei dem die Konfigurationsdaten aus der Registry gelesen werden und beim Programmende zurückgeschrieben werden, hab' ich vor Jahren mal für Delphi 7 implementiert. Das Grundprinzip des KI-Beispiels kommt dem sehr nahe, so dass ich davon ausgehe, dass Du das Beispiel übernehmen kannst und eine Anpassung an Deine Anforderungen möglich sein sollte.