Hi Barnti, hi Choose
kleine bemerkungen am rande:
Delphi-Quellcode:
TClassIndex = (Ansprechpartner,Auftrag,auftragstatus,benutzer,bereich,beschaedigung,config,
container,dbdesigner4,dokument,foto,hafenplatz,kolli,Kunde,
packliste,partie,partiestatus,partiekarte,pending,position,produktbeschreibung,
produktgruppe,
sql,unterpartie,userconfig,vertrag,zustaendigkeit);
TClassArray=
array[Ansprechpartner..zustaendigkeit]
of String;
Hier benutzt du zum definieren der array-grenzen eine range, die sowieso den gesammten bereich des enum-typs einschliesst. Dies kannst du auch so machen...
TClassArray= array[TClassIndex] of String;
...dann müsstest du nicht immer die array-deklaration anpassen. Darüber hinnaus frag ich mich, ob dieses array überhaupt von nöten ist? Denn man kann einen enum-wert auch leicht zu einem string auflösen. zB.:
Delphi-Quellcode:
uses typInfo;
...
function GetClassByClassIndex(const aClassIndex:TClassIndex):TPDObjectClass;
var clsName:strinf;
begin
clsName := foramt('TPD%s',[getEnumName(TypeInfo(TClassIndex), integer(aClassIndex))]);
result := findClass(clsName);
end;
function CreateObjectByClassIndex(const aClassIndex:TClassIndex):TPDObject;
var aClass:TPDObjectClass
begin
aClass := GetClassByClassIndex(aClassIndex);
if assigned(aClass) then
result := aClass.create(<standard_params>)
else
result := nil;
end
Da eine metaklasse ja auch eine primitive fabrik ist, wäre das möglicherweise schon ausreichend. Hab aber dein problem auch nicht ganz kapiert. Für abstraktere lösungen bietet sich natürlich Choosens lösung an, oder eine kombination.
Vielleicht nütz das dir ja was. Und ich frag mich warum du als index ansonsten einen integer benutzt, der ja alles andere als eindeutig sein kann, bzw verrutschen könnte?
mâxîmôv.
{KDT}