Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Динамическое создание


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

Код


Var
 OBJ:TObject;
begin

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

// или

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

end;


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

Код

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

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

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

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

Или я не понял вопроса? smile

Автор: ALeXandrK 29.7.2007, 12:35
Ну это точно ерунда какая то:
Код

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 нужно разное кол-во памяти.

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

Автор: Yanis 29.7.2007, 13:37
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1185362246&n=0

Автор: lukas 29.7.2007, 15:41
ALeXandrK, 

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

Автор: Shaggy 29.7.2007, 17:58
а если так?

Код

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


ЗЫ. класс должен быть зарегистрирован

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)