Главная страница
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
1-1140586210
__DATA__
2006-02-22 08:30
2006.03.26
Сохранение заголовков всех компонентов формы


2-1141914459
oleg__
2006-03-09 17:27
2006.03.26
TRxFolderMonitor


2-1142165553
dera
2006-03-12 15:12
2006.03.26
Как отловить событие движения курсора по записям в DBGrid-е?


2-1142110719
afisher
2006-03-11 23:58
2006.03.26
как связывать данные переменной между формами?


2-1142138454
ученик1
2006-03-12 07:40
2006.03.26
Структура TSearchRec