![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание компонентов в run-time [D7, XP]
Flint-1983 © (2006-03-12 22:31:00)Здравствуйте! Как в режиме run-time создать любой компонент.
Например, на форме предлагается ввести имя класса компонента, вводим (пусть TButton) и он появляется на той же форме.
Спасибо
Ega23 (2006-03-13 10:04:00) [1]
> x:array[byte] of TButton;
Ну и хранить это дело лучше не в массиве, а в каком-нибудь TObjectList
icWasya (2006-03-13 09:42:00) [2]Если уж делать NewInstance, то не забывайте и про FreeInstance
Obj := GetClass( 'TPanel' ).NewInstance;
if Obj is TWinControl then
WinControl := TWinControl( Obj ).Create( Self )
else begin
Obj.FreeInstance;
Exit;
end;
Defunct (2006-03-13 02:29:00) [3]Но эта прога создает еомпоненты заранее известных классов (TButton) а мне нужно выбрать класс run-time, например ч/з combobox.
Пробовал так:
x: array[byte] of TComponent;
Пробуйте типа такого
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterClasses( [TButton, TPanel] ); // <-- регистрируем классы
end;
// создаем по имени...
procedure TForm1.Button2Click(Sender: TObject);
var
Obj : TObject;
WinControl : TWinControl;
begin
Obj := GetClass( 'TPanel' ).NewInstance;
if Obj is TWinControl then
WinControl := TWinControl( Obj ).Create( Self );
with WinControl do
begin
Parent := Self;
Left := 10;
Top := 10;
Visible := True;
end
end;
Ihor Osov'yak (2006-03-13 01:59:00) [4]см. GetClass для получения класса по его имени и далее Create для создания экземпляра класса.
Перед использованием GetClass возможно придется использовать RegisterClass, посмотрите справку на эту тему.
Flint-1983 (2006-03-12 23:15:00) [5]Интересуют визуальные классы.
Например:
x:array[byte] of TButton;
..........
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to strtoint(edit1.Text) do
begin
x[i]:=TButton.create(self);
x[i].parent:=form1;
x[i].left:=10;
x[i].top:=10+50*i;
x[i].Width:=250;
x[i].Caption:='Компонент '+x[i].ClassName;
end;
end;
Но эта прога создает еомпоненты заранее известных классов (TButton) а мне нужно выбрать класс run-time, например ч/з combobox.
Пробовал так:
x: array[byte] of TComponent;
.......
x[i]:=TComponent.create(combobox1.Text);, но не получилось
Anatoly Podgoretsky (2006-03-12 23:04:00) [6]Создать любой класс можно конструктором Create
Desdechado (2006-03-12 22:50:00) [7]а если такого класса нет или он невизуальный?