Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.005 c
15-1355815611
Lifeless77
2012-12-18 11:26
2013.04.14
Помогите решить 2 задачки на теорию вероятности,пожалуйста.


15-1355922292
картман
2012-12-19 17:04
2013.04.14
хочу 32 часа


2-1349897717
Anariem
2012-10-10 23:35
2013.04.14
Перемещение Label


2-1349793591
ixen
2012-10-09 18:39
2013.04.14
cxDBTreeList и поле колонки


4-1264583204
GanibalLector
2010-01-27 12:06
2013.04.14
Проверка создания дополнительного потока.




   Наверх