Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Создание компонентов в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
5-1127898961
Иванов__
2005-09-28 13:16
2006.03.26
Нужен компонент HTML-редактор


5-1127479324
Priest
2005-09-23 16:42
2006.03.26
Сделать недоступным пункт меню редактора компонента


2-1141889692
veb
2006-03-09 10:34
2006.03.26
Запретить всатвку в таблицу


15-1140944240
Vahan
2006-02-26 11:57
2006.03.26
Kомплексные числа . pas


4-1136451039
ZZZ
2006-01-05 11:50
2006.03.26
Блокировка доступа к Flash устройству.