Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
15-1141160102
sniknik
2006-02-28 23:55
2006.03.26
В тему. ;)


1-1140514864
KyRo
2006-02-21 12:41
2006.03.26
Case для строк


15-1141648808
Volf_555
2006-03-06 15:40
2006.03.26
Какие есть сайты для закачки фильмов по HTTP?!


15-1141227189
Ariman
2006-03-01 18:33
2006.03.26
Трудоустройство иностранцев в России


1-1140463549
Grol
2006-02-20 22:25
2006.03.26
Потоки созданные ExcelApplication





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский