Это очень распространено.
Вам нужно держать список экземпляров объекта по имени. Вы уже предложили это со своим списком строк. Это может быть использовано для извлечения экземпляра по имени. Так:
Когда вы создаете свой объект, вы делаете:
MyObjList := TStringList.Create;
MyObj := TMyObj.Create;
MyObjList.AddObject( 'Thing', MyObj );
MyObj2 := TMyObj.Create;
MyObjList.AddObject( 'Thing2', MyObj2 );
и т.д.
Теперь для извлечения вы просто выполните:
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