Главная страница
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.008 c
15-1355571069
OLEG1963LORA
2012-12-15 15:31
2013.04.14
Аппаратное обеспечение


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


15-1355826486
Error0xDEADBEEF
2012-12-18 14:28
2013.04.14
Оформление кода


15-1355873470
Дмитрий С
2012-12-19 03:31
2013.04.14
Обновление вверх по дереву.


2-1349481129
Вова
2012-10-06 03:52
2013.04.14
как получить handle запускамемого приложения