Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.14;
Скачать: CL | DM;

Вниз

TClassList. Получить класс по названию.   Найти похожие ветки 

 
dummy_user   (2012-12-18 18:06) [0]

Добавляю название класса в TClassList.
Как теперь его получить по имени класса?

Типа:



type
 TMyClass    = class;
 TMyClassEx = class (TMyClass)
 
var
  ClassList: TClassList;
  O: TMyClass;
begin
  ClassList.Add(TMyClass);
  O:= ClassList.Get("TMyClassEx").Create;

end;



 
dummy_user   (2012-12-18 18:07) [1]

*

ClassList.Add(TMyClassEx);


 
брат Птибурдукова   (2012-12-18 18:56) [2]

Никак, в общем-то. Используй TStrings, используй TDictionary.


 
брат Птибурдукова   (2012-12-18 18:57) [3]

Можно к TClassList хелпер прихреначить, который будет по всему списку бегать и выдавать нужный класс.


 
Аббат Пиккола   (2012-12-18 19:00) [4]

Я, конечно, не спец, но по-моему RTTI позволяет делать такие вещи.


 
dummy_user   (2012-12-18 19:31) [5]


> брат Птибурдукова   (18.12.12 18:56) [2]
>
> Никак, в общем-то. Используй TStrings, используй TDictionary.
>


TDictionary - Delphi 7.
TStrings     - там только TObject можно добавить, а не мета-класс.


> Аббат Пиккола   (18.12.12 19:00) [4]
>
> Я, конечно, не спец, но по-моему RTTI позволяет делать такие
> вещи.


Есть в младших версиях.

Тогда сделаю через TList.


 
брат Птибурдукова   (2012-12-18 20:07) [6]


> TStrings     - там только TObject можно добавить
"Когда б вы знали, из какого сора…" Если б ты знал, какие мерзости подчас приводят к TObject... %-)


> по-моему RTTI позволяет делать такие вещи
ну что-то вроде GetClass("qqq").Create там соорудить можно, но TClassList, насколько я понимаю, там и рядом не лежит. Посему вопрос — автору нужен список классов или создание класса по имени?


 
dummy_user   (2012-12-18 20:10) [7]


> создание класса по имени?


Да.


 
stas ©   (2012-12-18 20:23) [8]

Может быть тебе это надо ?

type
TMyClassType =class of TMyClass;
.....

var
cls: TMyClassType;
r:TMyClass;
ClassName:string;
...
ClassName:="TMyClassEx";
cls:=TMyClass(FindClass (ClassName));
r:=cls.Create (self);

...
procedure regClass;
begin
  RegisterClass(TMyClass);
  RegisterClass(TMyClassEx);
end;

....

initialization
regClass;


 
брат Птибурдукова   (2012-12-18 20:29) [9]


> cls:=TMyClass(FindClass (ClassName));r:=cls.Create (self);

Два уточнения: 1) надо или GetClass().Create, или FindClass(); if Assigned(cls) then cls.Create 2) класс должен наследоваться от TPersistent.


 
dummy_user   (2012-12-18 21:24) [10]


> stas ©   (18.12.12 20:23) [8]
>   RegisterClass(TMyClass);


Оно не для системных нужд?


 
брат Птибурдукова   (2012-12-18 21:33) [11]

Оно не.


 
Palladin ©   (2012-12-19 10:25) [12]


> Оно не для системных нужд?

каких таких системных?



Страницы: 1 вся ветка

Текущий архив: 2013.04.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1355839583
dummy_user
2012-12-18 18:06
2013.04.14
TClassList. Получить класс по названию.


15-1355464494
brother
2012-12-14 09:54
2013.04.14
оптимальна скорость доступа к массиву


4-1264407457
QAZ
2010-01-25 11:17
2013.04.14
uac + действия или


15-1355838147
Kerk
2012-12-18 17:42
2013.04.14
Проблема с memory-mapped file


15-1355208502
alexdn
2012-12-11 10:48
2013.04.14
Пхп