2009-08-05 1 views
1

In Delphi 7, wie eine Instanz eines persistenten Objekts erhalten, angesichts der Objekt-ID in Zeichenfolge?Erhalten Sie eine Instanz eines persistenten Objekts, gegeben die Kennung in Zeichenfolge

function TForm1.GetObject(Identifier: string): TPersistent; 
begin 
    //what to do here? 
end; 

Beispiel:

//If I have these declared... 
public 
    MyString: string; 
    MyStringList: TStringList; 

//the function will be used something like this 
MyString:=TStringList(GetObject('MyStringList')).Text; 

Vielen Dank im Voraus und bitte entschuldigen Sie mich für nicht in der Lage, meine Frage klar auf Englisch auszudrücken.

Antwort

1

Sie könnten eine veröffentlichte Eigenschaft erstellen, auf die über Laufzeittypinformationen (RTTI) zugegriffen werden kann. Siehe S. 73 von Delphi in a nutshell und GetObjectProp.

Writeln((GetObjectProp(O,'ObjField') As TNamedObject).ObjectName); 
2

Dies ist sehr häufig. Sie müssen eine Liste der Objektinstanzen nach Name halten. Sie haben dies bereits mit Ihrer String-Liste vorgeschlagen. Dies kann verwendet werden, um die Instanz anhand ihres Namens abzurufen. Also: Wenn Sie Ihr Objekt erstellen Sie tun:

MyObjList := TStringList.Create; 

MyObj := TMyObj.Create; 
MyObjList.AddObject('Thing', MyObj); 

MyObj2 := TMyObj.Create; 
MyObjList.AddObject('Thing2', MyObj2); 

usw.

Nun, Sie einfach abrufen zu tun:

function GetObject(const AName : string) : TMyObj; 
begin 
    I := MyObjList.IndexOf(AName); 
    If I = -1 then 
    Raise Exception.Create('Cant find it'); 
    Result := MyObjList[I] as TMyObj; 
end; 

Bri

Verwandte Themen