Wir basteln uns ein Plugin-System
Basisklasse bzw. Interface definieren. Beinhalten sollte die Klasse z.B. folgende Methoden
Delphi-Quellcode:
Type
TPluginDialog =
Class
public
Function Name :
String;
virtual;
Abstract;
Function Description :
String;
virtual;
Abstract;
Function Version :
String;
virtual;
Abstract;
Function GetSetupDialog : TForm;
virtual;
Abstract;
Procedure SaveSetupChanges;
virtual;
Abstract;
Function GetPrintDialog : TForm;
virtual;
Abstract;
End;
// Die Unit definiert eine Funktion
Function Instance : TPluginDialog;
Pro zu druckendem Dialog erstellst Du eine Ableitung der o.g. Klasse, implementierst die virtuellen Methoden und schmeißt das Kompilat in eine
BPL. Die Funktion "Instance" liefert dabei eine Instanz der Form.
Im Unterverzeichnis 'Plugins' kannst du dir eine Ordnerstruktur ausdenken und dann die
BPL dort hineinkopieren.
Dein Programm liest nun einfach die Ordnerstruktur des "Plugins"-Unterverzeichnisses ein, erstellt für jedes Verzeichnis einen Knoten und für jede
BPL-Datei ein Blatt. Du lädst die
BPL, instantiierst ein Objekt der in der
BPL definierten Klasse und hängst das an die Data-Eigenschaft des Blattknotens.
Die Beschriftung des Blattes ergibt sich aus "Instance.Name", ein eventueller Hint aus "Instance.Description". Die Versionsinformation kannst Du auch noch anzeigen.
klickt man auf ein Blatt, stellst Du auf der rechten Seite den Setup-Dialog dar. Den OK-Button zum Speichern der veränderten Einstellungen kontrollierst Du. Wenn man da drauf drückt, rufst Du "Instance.SaveSetupChanges" auf.
Ein weiterer Button "Print" ruft dann "Instance.GetPrintDialog" auf und druckt das Formular aus.
Fertig.
Das ist beliebig erweiterbar, die Ordnung (=Struktur) jederzeit änderbar. Kopiert man eine neue
BPL in eines der 'Plugins'-Verzeichnisse, müsstest Du entweder neu starten oder über einen 'Rescan'-Button die Struktur wieder einlesen.
Das Bild hängt schief.