Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание, зная только название класса объекта...  
V
    Опции темы
lukas
Дата 29.7.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Собственно... Даже как то вопрос такой.. а это вообще возможно. Ну что-то типа этого:

Код


Var
 OBJ:TObject;
begin

OBJ:=('TButton').Create // 

// или

(OBJ as 'TLabel').Caption='000';

end;


Ну или хотя бы с классами

Код

var
 OBJ:TObject;
 CS:TClass;
begin
// А вот ту как мне создать объект зная что TClass - это Класс какого-то компонента, и нормально по человечески обратица к нему, создать и т.п. Самое главное. Класс заведомо неизвестен.. 
end;



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
sentry
Дата 29.7.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Code Monkey
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 29.1.2007
Где: Москва

Репутация: 2
Всего: 10



Цитата(lukas @  29.7.2007,  10:58 Найти цитируемый пост)
что-то типа этого

Ну что-то типа этого возможно:
Код

var
  Obj: TObject;
begin
  Obj := TButton.Create(Form1);
  (Obj as TLabel).Caption := 'Text';
end;

Или я не понял вопроса? smile
PM MAIL   Вверх
ALeXandrK
Дата 29.7.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Ну это точно ерунда какая то:
Код

Var
 OBJ:TObject;
begin

OBJ:=('TButton').Create // 

// или

(OBJ as 'TLabel').Caption='000';

end


Если тебе известен тип класса только по имени, может тогда замутить что-то такое:
Код

if str =  'TLabel' then OBJ:=TLabel.Create;
if str = 'TButton' then OBJ:=TButton.Create;
...


А может вообще стоит копать в сторону типа Variant ... может с ним что-то такое получиться.
Нужно только будет создавать свой код для преобразования. 

Факт остается в том, что просто по строке 'TLabel' объект не создашь. Для компилятора это ведь просто строка и плевать он хотел, что там в ней. Он знает сколько памяти нужно для нее. А вот для TLabel или TButton нужно разное кол-во памяти.

Ерунда какая то... может ты задачку опишешь, может и не надо здесь таких велосипедов?


Это сообщение отредактировал(а) ALeXandrK - 29.7.2007, 12:35


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Yanis
Дата 29.7.2007, 13:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111





--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
lukas
Дата 29.7.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



ALeXandrK, 

мне нужно создать объект зная только его ClassName (String), обратица к нему я смогу через модуль TypInfo, а вот создать то что мне нужно будет трудновато... ((


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Shaggy
Дата 29.7.2007, 17:58 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 2.5.2007
Где: г.Ижевск

Репутация: 3
Всего: 5



а если так?

Код

Var
  ComponentClass:TComponentClass;
  Component:TComponent;
...
  ComponentClass:=TComponentClass(GetClass('TLabel'));
  Component:=ComponentClass.Create(Nil);
  ...


ЗЫ. класс должен быть зарегистрирован
PM MAIL ICQ   Вверх
ALeXandrK
Дата 30.7.2007, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Yanis дал полное решение данного вопроса, думаю вопрос можно отметить как решенный smile 


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.