Thema: Delphi Registrieren von Klassen

Einzelnen Beitrag anzeigen

barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Registrieren von Klassen

  Alt 11. Nov 2004, 07:41
Hallo,

nun noch einaml zurück zum Thema. Ich möchte in einer Klasse alle für die Konfiguration erforderlichen Daten ablegen. Dazu gehören auch Prozeduren und Funktionen, die mir zur Laufzeit Konfigurationsarameter ermitteln. Hier mal etwas Code:
Delphi-Quellcode:
unit ConfigFile;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs;

type
  TConfigFile = class (TObject)

...

TPDObjectClass = class of TPersistent;

{ Hier müssen alle in der Datenbank enthaltenen Tabellen angegeben werden.
}

TClassIndex = (
              {1}    Ansprechpartner,
              {2}    Auftrag,
              {3}    auftragstatus,
              {4}    ...
              {5}
              {6}    
              {7}    
              {8}    
              {9}    
              {10}   
              {11}   
              {12}   
              {13}   
              {14}   
              {15}   
              {16}   
              {17}   
              {18}   
              {19}   
              {20}   
              {21}   
              {22}   
              {23}   
              {24}   
              {25}   
              {26}   
              {27}   );

// Beinhaltet die Namen der Tabellen. Um mit einer Klasse zu Arbeiten, wird die
// entsprechende Klasse aus dem Array per Tabellenname oder per Index gesucht und ein 'TPD'
// vorangestellt, um den Namen der Klasse zu erhalten
TClassArray= array[Ansprechpartner..zustaendigkeit] of String;

procedure Register;

implementation
// Hier stehen statische Parameter
const
  C_DatabaseName = 'Name';
  C_Host = 'Host';
...

//Das 'ClassArray' lade ich zur Laufzeit aus der DB (TableList):
 for i:=0 to TableList.Count-1 do
      ClassArray[TClassIndex(i)]:= List.Strings[i];

...

//Nun kann ich folgendes machen:
function TPDInterface.GetPDObject(Index: Integer): TPDObject;
var
  pdClass: TPDObjectClass;
begin
  pdClass:= findClass('TPD'+ClassArray[TClassIndex(index)]);
  //pdClass:= findClass('TPDAnsprechpartner');
  if FPDObjects[index]= NIL then FPDObjects[index]:= TPDObject.Create(Database);
  result:= FPDObjects[index];
Dazu müssen die Klassen allerdings registriert sein:
Delphi-Quellcode:
initialization
 RegisterClasses([TPDAnsprechpartner,TPDAuftrag, TPDAuftragstatus,...]);
Da ich aber erst zur Laufzeit auf die Config-Klasse zugreifen kann, muss ich das Registrieren also an einer anderen Stelle tun als im Initialization-Teil.

Ich dachte also das könnte ich auch beim Erzeugen meines Hauptformulars tun:
Delphi-Quellcode:
unit main
...
constructor TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
  aClass: TPDObjectClass;
  ClassName: String;
begin
  FApplication:= Owner;
  // Hier werden alle Parameter des ConfigFiles geladen und die TabellenNamen der DB ermittelt
  FDatabase:= TmyDatabase.Create(Owner);

  For i:=0 to Length(FClassArray) -1 do begin
    FClassArray[TClassIndex(i)]:= Database.FTableArray[i];
    ClassName:= 'TPD'+FClassArray[TClassIndex(i)];
    aClass:= TPDObjectClass(ClassName);
    RegisterClass(aClass);
  end // for
end;
Mein Hauptanliegen ist es alle Konfigurationsparameter in einer eigenen Klasse zu halten (ConfigFile).
Kann jemand dazu Stellung nehmen? Kann jemand helfen?
Gruß,

Barnti
  Mit Zitat antworten Zitat