Einzelnen Beitrag anzeigen

FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#2

AW: Design und Daten Entscheidungshilfe

  Alt 2. Jul 2011, 10:54
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.
  Mit Zitat antworten Zitat