Thema: Delphi Registrieren von Klassen

Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#22

Re: Registrieren von Klassen

  Alt 11. Nov 2004, 13:29
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}
  Mit Zitat antworten Zitat