Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизСоздание компонентов в run-time Найти похожие ветки
← →
Flint-1983 © (2006-03-12 22:31) [0]Здравствуйте! Как в режиме run-time создать любой компонент.
Например, на форме предлагается ввести имя класса компонента, вводим (пусть TButton) и он появляется на той же форме.
Спасибо
← →
Desdechado © (2006-03-12 22:50) [1]а если такого класса нет или он невизуальный?
← →
Anatoly Podgoretsky © (2006-03-12 23:04) [2]Создать любой класс можно конструктором Create
← →
Flint-1983 © (2006-03-12 23:15) [3]Интересуют визуальные классы.
Например:
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);, но не получилось
← →
Ihor Osov'yak © (2006-03-13 01:59) [4]см. GetClass для получения класса по его имени и далее Create для создания экземпляра класса.
Перед использованием GetClass возможно придется использовать RegisterClass, посмотрите справку на эту тему.
← →
Defunct © (2006-03-13 02:29) [5]Но эта прога создает еомпоненты заранее известных классов (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;
← →
icWasya © (2006-03-13 09:42) [6]Если уж делать NewInstance, то не забывайте и про FreeInstance
Obj := GetClass( "TPanel" ).NewInstance;
if Obj is TWinControl then
WinControl := TWinControl( Obj ).Create( Self )
else begin
Obj.FreeInstance;
Exit;
end;
← →
Ega23 © (2006-03-13 10:04) [7]
> x:array[byte] of TButton;
Ну и хранить это дело лучше не в массиве, а в каком-нибудь TObjectList
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c