Страница 1 из 1

копирование компонента на лету в mse

СообщениеДобавлено: 22.09.2009 07:44:02
minoshi
Доброго времени суток!

Возник вот такой вопрос, можно ли скопировать компонент при выполнении программы?
имеем flv0 : tfilelistview, который расположен на tabpage0, нужно создать полную его копию при нажатии клавиши на вкладке tabpage1

я попробывал вот так:
Код: Выделить всё
var
  flv : tfilelistview;

begin
   flv := tfilelistview.create(self);
   flv := flv0;
   flv.name := 'flv1';
   flv.parentwidget := tabpage1;


компонент на вкладке 1 появился, но на вкладке 0 исчез (я так понял, что он не скопировался, а переносся).

Re: копирование компонента на лету в mse

СообщениеДобавлено: 22.09.2009 12:05:15
Attid
нельзя.

надо создать новый и настроить его также как первый.

Re: копирование компонента на лету в mse

СообщениеДобавлено: 22.09.2009 13:50:53
minoshi
либо создавать через .create(self)
и копировать все свойства

печально, столько "лишних" строк ...

Re: копирование компонента на лету в mse

СообщениеДобавлено: 22.09.2009 16:39:24
Attid
Use copycomponent() procedure.

Martin

Re: копирование компонента на лету в mse

СообщениеДобавлено: 22.09.2009 22:51:14
minoshi
это не процедура, а функция

где-то так ...
Код: Выделить всё
uses ... mseclasses;
...
procedure tmainfo.copy_component(const sender: TObject);
var b : tbutton;
begin
b := tbutton.create(self);
b := copycomponent(tbutton2,nil,nil,nil,nil,nil) as tbutton;
with b do
   begin
    name := 'sss';
    caption := 'new';
    bounds_y := 70;
    parentwidget := mainfo;
   end;
end;

работает, однако.
свойство name менять в обязательном порядке, иначе нарветесь на ошибку "dublicate name"

Добавлено спустя 6 минут 30 секунд:
p.s. осталось сообразить, как все это прикрутить к своей программе :-\