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?